It is possible but you'd need some pretty accurate resistors, let's say 1%, and even so with just an 8 bit ADC you'd probably want to hand pick out of about 10-20 pieces, the resistor that's closer to the value you want.
PICs are much easier to work with, with 10bit ADC you get 0 to 1023 values.
If 0v is 0 , and 255 is 5v, you basically have 5v / 256 = 0.02v ... the power supply you feed the mcu with probably has more ripple than that, so you probably can't go with 256 values unless you use some voltage reference for the ADC.
I'd aim for values of 5 +/- 3 , 15 +/- 3 , 25 +/- 3 so basically anything that falls within 3-8 is button 1 , 12-18 is 2 and so on. Though I'd probably ignore anything below 10, so 12-18 would be button 1.
Also, keep in mind the mcu needs a few microseconds to do the conversion between what's on the pin and the voltage. It's slower than just checking if a pin is 1 or 0. If you put a button on each pin, that's fast. But if you use the pin as an ADC to get the actual voltage, it's a bit slower.
If you loop and check the state of the buttons often, it may take too much time waiting for conversions. Sure, some microcontrollers have capability to start the ADC process and continue, then get an interrupt when the ADC is done determining the value but it gets complicated.
When people push buttons, they usually keep the finger on the button for a few ms, so that's OK, but you'd still need to check the state of the buttons every few ms, which might still be too often. You could link all the buttons together through some small signal diodes and connect that to another pin of your microcontroller and then you can set an interrupt on that pin.
Now when the pin is high, you know one or more buttons were pressed and the interrupt gets triggered and you can start the ADC conversion to retrieve the voltage on the other input pin.
There's one more thing you have to keep in mind, buttons are problematic, as in when you push the button between the OFF state and steady ON state of the button there may be a few ON and OFF cycles that are very short in length, due to the way the contact is made inside the buttons. Because of this, it's possible for the button to be detected as pressed several times while user only wants to press one.
This is usually filtered in software or hardware and it's a term called debouncing, see the video below.
You can debounce each button in hardware with a very small capacitor or a capacitor+resistor combo, or it can be done in software if it's just one or two buttons. I personally like the hardware approach, but if you do something commercially, they may want to save costs or you don't have the space on the board for the ceramic capacitors
If you're not limited by the pcb size you could also use a shift register, to get 8 or more inputs converted into a serial stream... basically the chip gets 0v or 5v from buttons through a resistor to limit the current, and when the microcontroller sends a signal through a pin to the shift register, it sends the 8 bits one after another to the microcontroller.
The chip in this video is this one:
http://www.digikey.com/product-detail/en/74HC165N,652/568-1410-5-ND/763014 datasheet:
http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdfWhenever you want to read the state of all the 8 buttons connected to the parallel inputs of the shift register, you just send a high signal to one pin of the shift register, then read the state of the input from the other pin. Set the signal low. Repeat 8 times and you get all 8 input signals in a row. So your microcontroller only needs to connect to 2 or 3 pins on the shift register. The advantage is you get all eight bits separately so no need to mess around with resistors and conversions.
And, there's also shift registers that have 16 inputs or more that work just the same.