To me, you are talking about two different things: That is the how is the processor programmed and USB.
Programming the board: some processors reserve a chunk of their ROM area, to have a code that runs when the processor is reset, that may handle things like programming the rest of the chip, etc. Others like the Teensy choose to have the programming down by a different chip.
There are plusses and minus with the different approaches. The Teensy for example, if you could hook up a hardware programmer to it, the programmer could not overwrite the code on the other chip. Whereas for example with AVR chips, it was not uncommon, that if you used a hardware programmer, you would wipe out the bootloader, and then to be able to program the chip over USB, you had to burn in the bootloader...
USB: To really understand this stuff, you need to look through the USB specifications, but a site I often go to is:
USB in a NutShell - Chapter 1 - Introduction (beyondlogic.org)
When you plug in a USB device into your computer (or hubs or ...), The thing that you plugged it into detects that it was plugged in. There is a hardware standard, where the signal wires on the USB have Pull up or Pull down resistors of some specific value on specific signals that tell the other device if you are Low speed (LS 1.5M), Full Speed (FS 12M), High Speed (HS 480M) and something different when you get up to USB 3...
When what you plug into detects you, it tries to start up a conversation, with what is plugged into it. Typically it will start off asking the board for it's device descriptor. This contains information like the Vendor ID, Product ID, Device type... Once it retrieves this information, it may then ask for the Configuration descriptors, and then the Interface Descriptors... Through all of this the system will detect if this thing into it is a something like a Serial Device and if so what type (CDC ACM, FTDI, ...) and load the appropriate drivers. Likewise it can detect if the device supports Keyboard, or Joystick or Mouse, or Tablet... and Again talk to those.
Now to your question: With processors that don't support USB natively (or choose not to use the support), you might choose to add that support through a different chip (FTDI, CP2102, PL2301, ...)
Pluses of this approach: When plugged in to USB, it is typically always active, regardless of the state of the main processor. Downside, flexibility. Typically a lot of these only support Serial communications. Speed or throughput: that is when that chip receives a packet from the host, it then has to send it to your main processor, often times over a hardware UART... likewise if send stuff from your sketch to the host, it goes out over a UART to the other chip, who then sends it...
For those, who have built in USB support, like the MNIMA or Teensy or.. It is easier to add the flexibility to configure the USB in many different ways, like Keyboard, joystick, mouse, Serial, multiple serial, ... Downside is if you sketch totally messes up, you could lose your USB communications. Likewise, when you download a new sketch, the Serial monitor drops out...
Then there is the odd duck: the UNO R4 WIFI, which also has an ESP32S3 processor on it. If your sketch is setup to run as USB Serial, the ESP32 has control over USB, and your communications of the main processor is to talk through a UART to the ESP32, who forwards the data to and from the host.... However, if you configure it for Keyboard or Mouse, then it switches a register, which connects it's USB pins to USB, and it does the USB communications. You also have the option to use a solder jumper to fix the USB to the main processor, which I have done with one of mine...
Sorry for rambling here!
Kurt