Can you get better than 10 bit A to D resolution from the Arduino platform.

Related to averaging, you can also use oversampling with the 10bits ADC.
Read - http://www.atmel.com/Images/doc8003.pdf -

4 samples gives you 1 bit extra
16 samples gives you 2 bit extra
64 samples => 3 bit extra
256 samples => 4 bit extra
1024 samples => 5 bit extra

the price is time ...

//
//    FILE: analogReadN.pde
//  AUTHOR: Rob Tillaart
//    DATE: 2012-05-10
//
// PURPOSE: higher precision analogRead()
//
// http://www.atmel.com/Images/doc8003.pdf 
//

void setup()
{
  Serial.begin(115200);

  for (int b=10; b< 17; b++)
  {
    unsigned int val = analogReadN(A0, b);
    Serial.println(val, DEC); 
  }
}

void loop()
{
}

uint16_t analogReadN(uint8_t pin, uint8_t bits)
{
  bits = constrain(bits, 10, 16) -10;

  int samples = 1 << (bits << 1);

  uint32_t sum=0;
  for (int i=0; i< samples; i++) sum += analogRead(pin);     
  return sum >> bits;                             
}

uint16_t analogReadNreferenc(uint8_t pin, uint8_t bits)
{
  bits = constrain(bits, 10, 16) -10;

  int d = 1;
  for (int i=0; i<bits; i++) d *= 2;
  int samples = d*d;

  uint16_t sum=0;
  for (int i=0; i< samples; i++) sum += analogRead(pin);     
  return sum / d;   // rounding => return (sum + d/2) / d;                              
}