Cascading ADC's to get higher resolution
Splitting your input range will get you 13 bit, not 24. Suppose you have an input range from -4.096V to +4.096V. Then a 12-bit ADC will have a 2mV resolution: 2\$^{12}\$ x 2mV = 8.192V (the range from -4.096V to +4.096V). If you take the positive half you get 1mV resolution there because your range is halved: 2\$^{12}\$ x 1mV = 4.096V. That's 2\$^{12}\$ levels above 0V, and another 2\$^{12}\$ below. Together 2\$^{12}\$ + 2\$^{12}\$ = 2\$^{13}\$, so that 1 bit extra, not 12. 

About changing the reference voltage. I'll give a different example. Suppose you have a 1 bit ADC and want to get 12 bits by changing the reference. One bit will give you a 1 if the input is greater than \$\frac{V_{REF}}{2}\$, and a zero otherwise. Suppose your reference is 1V, then the threshold is 0.5V. If you change your reference to 0.9V you'll have a new threshold at 0.45V, so you're already able to discern 3 different levels. Hey, this may work, I can do 12-bits with a 1-bit ADC, and then probably also 24-bit with a 12-bit ADC!
Hold it! Not so fast! You can do this, but the components of your 1-bit ADC have to be 12-bit grade. That's for the precision of the reference, and the comparator. Likewise, a 12-bit ADC would be able to do 24-bit if the precision of the ADC is precise enough, and that the precision of the varying reference voltage is 24-bit grade. So in practice you don't gain much.  

There's no such thing as a free lunch.

edit
There seems to be a misunderstanding about oversampling, and the fact that there are 1-bit audio ADCs which can give you 16-bit resolution.
If your input is a fixed DC level, say 0.2V in a 1V input range, your output will always be the same as well. With a 1-bit ADC this will be zero for our example (the level is less than half the reference). Now that will be so, whether you sample at 1 sample per second, or 1000. So averaging doesn't change this. Why does it work with the audio ADC?, because the voltage varies all the time (noise), which, according to Einstein (relativity, you know ;-)) is the same as keeping the voltage constant and varying the reference. And then you get several different readings while oversampling, which you can average to get a quite good approximation of your actual level.
The noise has to be strong enough to pass the ADC's threshold(s), and has to fit certain constraints, like Gaussian distribution (white noise). In the 1-bit example it didn't work because the noise level is too low.



Further reading:
Atmel application note AVR121: Enhancing ADC resolution by oversampling