The Microchip PIC16(L)F1783 has a 12 bit differential ADC and a fixed selectable internal voltage reference, and costs well under $2 in moderate quantities. The "L" version is limited to 3.6 volts, otherwise max 5.5 volt supply.
I have also considered the possibility of measuring the voltage on several taps of a battery pack by applying the voltages through MOSFET switches to a resistor and a capacitor connected to a comparator, and use the time of charging to determine the voltage. As long as the resistor and capacitor values are known and stable with temperature, the time can be determined very accurately to as many as 16 bits. A mux like the DG408 can be used up to 44 volts, but otherwise higher voltage MOSFET switches could read even higher.
I haven't fully worked out details, but take an example of 8 cells at 3.2 volts each, with a 500k resistor and a 100 nF capacitor, and a comparator with a reference of 2.048 VDC. For the voltage at the top, 25.6V, the setpoint is reached in 4.181 mSec, while for the single cell at 3.2V, it takes 51.103 mSec. A 1 MHz counter would provide precision of 25.6/4181 = 6 mV, and 3.2/51103 = 0.06 mV.