USB midi transports the same MIDI data and commands as old-serial-midi, so from an application point on the PC side there is almost no difference, its simply MIDI data.
The USB-midi descriptor tells the host operation system to treat the device as a midiport and makes it available for MIDI music apps automagically, this works like a charm for me on my Mac. The higher USB bandwith makes it possible to have several virtual midi cables routed through a single USB midi endpoint.
On the low level, microprocessor side, its a serial connection sending 4 byte packages consisting of a USB midi header byte and three bytes of midi data.
As a USB device its very similar to a virtual serial port, the most difference is in the device descriptor that tell the host how the device serial data is interpreted as a connected MIDI device. On the Maple low level side I get 4 byte packets of data, then its up to my code, or the MIDI handling object, to interpret them as MIDI data. I use Google and the USB-MIDI specification.
2) Its a serial data stream, the Sysex message type can be used to send 'any' device specific information. This can include binary data to a bootloader or a command to jump into bootleader mode.
3) As far as I can see a USB - midi bootloader should be about the same size as a dfu bootloader. But then you would need a special host midi application to program the chip. So I think the best is to use Sysex to send the chip to bootloader mode and then use the standard dfu firmware loaders.