12bit ADC will give us about 1.2mV per step:
5 / 4096 = 0.00122
But if we give Arduino a 1.2V voltage reference we get 1.1mV per step:
1.2 / 1024 = 0.00117
Does that means Arduino can be more accurate than a 12 bit ADC?
12bit ADC will give us about 1.2mV per step:
5 / 4096 = 0.00122
But if we give Arduino a 1.2V voltage reference we get 1.1mV per step:
1.2 / 1024 = 0.00117
Does that means Arduino can be more accurate than a 12 bit ADC?
In a word, no.
The Arduino uses a rather crude 10-bit ADC. If you feed it a small voltage reference, you can divide that small voltage into 1024 steps. (as you say, about 1.1mV/step)
If you feed the same small 1.2V reference voltage into a 12-bit ADC, you'll get 4 times as many steps for the same range. (about 293μV/step)
And, as mentioned before, the ADC's in Arduinos are not very good. They're slow, and not very accurate.
(To be technical, precision is how exactly you DESCRIBE your answer. A decimal reading using more decimal places is more precise than a reading with less decimal places. Accuracy is how close the measured value is to the actual value. If you're sloppy with your measurements but use lots of decimal places to write it down, and the answer is very far off, you have a precise but inaccurate answer. (e.g you measure something as 1.0000001 millimeters, but it's really 2.5 mm.
A 12-bit ADC is more precise than a 10-bit ADC, but it may or may not be more accurate. Given the crude nature of the ADCs in Arduinos, a dedicated 12-bit ADC is likely to be more accurate than built-in one.)