You may also want to look at how fast ADC works on various micros. You can probably do at least 1000-2000 accurate measurements per second which should be enough for a controller, as most of the time the buttons are pressed for more than 1ms so your controller would catch them.
With PICs you have 10 bit ADC and a built in voltage reference that can be configured to 1024mV, 2048mV or 4096 mV so it's straight forward to do the conversion, you'd have 1..4mV per step.
So for example, it wouldn't be far fetched to have the most important/most often used 8 buttons (let's say left right up down a b x y) on an 8 bit port and set interrupt on change so that your micro would be notified instantly when a button changes, and the less important buttons could be configured to produce various voltage levels when pressed .. for example buttons like start , select (my mind goes to nintendo gamepad) could output 0.5v , 0.75v , 1v etc
Assuming you may want to run the micro either from internal battery (3.7v to 4.2v) if let's say you add some bluetooth module to your controller for example, or from usb while the internal battery charges (5v), you'd probably set the internal voltage reference to 2v , but that still gives you easily enough separation for probably 8-12 buttons.. and easily done with a bunch of 1% resistors. Could potentially even run the ADC in 8 bit if you really need fast conversions.
The only potential downside is that you may or may not miss when two of these less important buttons are pressed at the same time but with clever choice of resistors you could actually detect when two buttons are also pressed.
This could make it possible to use the cheaper 14pin pic, reserving 8 io for most important buttons, 1-2 pins for led (maybe bi-color , amber for charging battery, green for on, or use just one pin and blink the led for charge status), 1-2 pins for adc of the less important buttons and one pic for adc of battery .. you're at less than 14 io pins.