Why use 2.048V and 4.096 as a reference?
When quantising voltages (i.e. passing through a ADC), you usually convert the voltage to an integer representation which is represented using a power of 2 scheme.
This means that they fall into the pattern of binary numbers, e.g. an 8 bit DAC has 256 individual levels. Using a reference that has a power of 2 number of millivolts means that the actual digital values have significant values.
For example, if you have an 11-bit DAC with a reference of 2.048, then the digital value is the number of millivolts.
Edit: As pointed out by Andrew Morton, this provides 2048 levels, whereas there are 2049 millivolt levels including 0. So therefore to properly represent each bit as a millivolt you would require an extra bit. However if you round consistently, it is still possible to round each element down and achieve 0-2047 mV, or round up and have 1-2048 mV. If you fit 2048 to 2049 then you lose the nice property of directly matching the number of millivolts.
4.096V and 2.048V references allow the ADC to generate an integer value in mV. It means each step of the ADC represents 1mV or an integer multiple of 1mV. 4.096V = 2^12 mV
The reason for these is because they can be easily divided down to a base 2. This makes them useful for things like ADCs where a 12-bit ADC with a rail between 0 and 4.096V will mean 1mV per bit, which is a much easier number.
There are also more voltages that do the same thing. You can also get Voltage references in 1.024V, which is 210. Different references can be used for different bit ADCs.