To try answering your question....
I guess what I am trying to understand is, is there any functional difference between "MIDI over USB" and "MIDI over USB via USB HOST"?
This really depends on what you meant by "functional difference".
The short answer is they use exactly the same communication. I have made every effort to keep the functions you use as close as possible to each other and to the MIDI library (normally for 5 pin DIN serial MIDI).
Obviously there are differences between USB device and USB host. On the hardware side, you can plug a USB hub into Teensy 3.6, 4.1 (or 4.0 if you connect to the 2 tiny pads) and then plug several USB MIDI devices into the hub. USB device mode can only work with a single computer (or whatever USB host, including another Teensy). On the software side, with device mode you get a single pre-defined instance named "usbMIDI", because you can only talk to 1 host. In host mode, you create as many instances as you like and you choose the names. You also choose whether to use the normal name with works with only 12 Mbit speed devices or "BigBuffer" which supports 12 or 480 Mbit, but uses more of Teensy's memory. In device mode, the same "usbMIDI" instance has big buffers on Teensy 4.0 & 4.1 where USB can run at 480 Mbit, and small buffers on Teensy 3.x where the USB is only 12 Mbit. The USB host instances inherit some generic functions from the host library which let you read the ID numbers and name of whatever USB device connects, whereas in device mode the name Teensy sends to your PC can be changed with some special code, but it's not the sort of thing you can do as dynamically as your program runs, because it has to be built into the code so Teensy can send it to your PC (or whatever USB host) when the host wants.
Whether any of that is considered "functional difference", I'm not sure.
But, if the Teensy is the USB host, does MIDI work the same way? Is it supported?
As far as sending and receiving MIDI messages, both can send MIDI messages in both directions, though the most common usage is for MIDI messages to flow from device to host.
I have tried to keep the API as similar as possible, so any code you write for USB device mode should be easy to use with USBHost_t36 if you just change the instance name, and of course create an instance of the host library's device driver with that name.
But if you follow the most common way of doing things, typically USB MIDI devices transmit MIDI messages which represent events from human interaction, like touching buttons / keys or turning knobs or pressing pedals. Normally messages from host to device are for showing status to humans, like changing LED state & color. You're not limited to doing only those things... you can send any MIDI messages you like in either direction. But if you're building a system and especially if it will be used by other people, generally following well established conventions really helps people to understand how to use a system.