Which switch/amplification method described is better for accurate reading of variable voltage using ADC?
I'm trying to design a relatively \$\color{blue}{\text{accurate}}\$ variable power supply with
  2~24v output voltage controlled from an MCU using \$\color{red}{\text{off-the-shelf parts}}\$.


ADC

Just use a decent external ADC with a single potential divider using resistors of high \$\color{blue}{\text{accuracy}}\$ (maybe 0.1% and 15 ppm/degC). A 16 bit ADC has a resolution of 1 in 65536 so 24 volts divided by 65536 gives about 0.3662 mV resolution. You can get off-the-shelf ADCs that have DNL and INLs of a couple of bits and gain and offset errors about the same. Don't mess around with a load of external switching of gain stages, get a decent 16 bit ADC (serial output). There are plenty to choose from. 

My personal preference given that I've literally used hundreds is this: -



It just delivers the goods. Worst case error is 4.15 LSb plus a zero offset error of 0.5 mV - that's well within what you need (about a 2 mV error). 

Resistor potential divider

Of course you have to have decent resistors and 0.1% types will generate a worst case full scale error of 48 mV but, this is can be calibrated out or, use 0.01% resistors to give a worst case full scale error of 4.8 mV. They'll cost a bit of course but, if you want decent \$\color{blue}{\text{accuracy}}\$ then you have to pay.

Voltage reference

You need to use a decent voltage reference too. Look out for initial accuracy percentage and drift factors with temperature. I tend to use really good ones such as the LTC6655B - it has an initial \$\color{blue}{\text{accuracy}}\$ of 0.025% and a drift of 2 ppm/degC but the C version is cheaper.