NXP LPC1343 have an USB-MSD bootloader, maybe others. It isn't hard nor long to program on STM32.
LCP11
U24 have it in ROM indeed. Not very stable though.
Programming a bootloader isn't an
easy task. It requires advanced knowledge of the toolchain to configure the linker and boot code. And it requires knowledge of the used interface to make it robust. Using USB isn't as easy as CAN to build. But for anything not MSC, you'll need an application. True.
In the end, you're linking
two projects into your mcu.
Most people lack the knowledge of the toolchain's linker (eg: they have never heard of a map file before).
I'd recommend not using USB MSC for bootloader because you then
rely on something you can't possibly have any effect on.
The Operating System and how it handles files.
Instead, use USB DFU, which is developed for this. You then only need an application. Which also resolves a lot of potential usage errors.
Eg: Will your USB MSC upgrade firmware still work on Windows 7 to 10, and 11? If it doesn't, you have to go on-site or have a lot of send-ins.
Safest way to perform USB MSC upgrade is to have enough memory to store the image fully (flash/sd/ram). Perform checksum, and rewrite it. Most mcu's don't have that though.