Start by knowing the standard thoroughly. a good reference to know by heart:
http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec.htmwith this you should alredy have enough knowledge to build a midi controller (with midi over a serial connection)
your first test program should be something like "toggle a LED when any valid data is received"
then "toggle a LED when a specific message/kind of message is received"
then maybe "dim different LED using different CCs"
and only then "transmit a note on message when pressing a button, a note off when releasing the button"
then understand how handle switch debouncing
then "transmit a CC using an analog input"
when you'll arrive at this point you will basically have all the ingredients you need.
Another nice touch will be the possibility to reassign functions, maybe via a pc application that will communicate with the serial port and you store all the parameters in the mcu's eeprom or flash
Only at this point i would dare to consider midi over usb. How you will handle the usb part is up to the specific family of microcontroller, but there are usually examples for the driver and the stack (there is the one in the microchip MLA for pics with usb that i'd like to try one day or another)
My suggestion is to use an MCU you know or you want to learn because if you go and do this with 8 bitters you will have to work at least on pure C with little to no abstraction (i.e. only the usb stack) . forget about arduino uno if you want lots of buttons and sliders and lights.
this should cover all the computational part. about the actual design, that's up to you. one commercially available solution is livid instruments. you might want to check that out