Any small microcontroller can do this, but you should investigate ones that have USB interfaces built-in. Some of the larger PICs have this, I think, and some of the larger AVRs.
You can scan multiple buttons in a grid using multiplexing, to reduce the amount of I/O needed. You need to use...