Yes it can be done, e.g. emulate a flash drive. I have done it.
I did my first (and so far only) USB on a NXP LPC2478, was not as bad as I thought. Found a "lpcusb" project, got it compiling and linking with my application (just the bootloader actually). Then I adapted the "Block device" example to emulate a USB flash disk. So when you plug my board into a PC, it looks like a (small) USB flash drive, no FTDI drivers, no drivers at all. Just copy the firmware/data files onto it. The PC handles all the complicated stuff during emulation, you just need to read/write a 512 byte whose block number is n.
But when you want to read/write the file subsequently with your own firmware, you will need to use someones FAT32 layer or else hack up a minimal one like I did.
Writing is a bit slow without external DRAM for a cache like I had, but it should work fine, my first version read/wrote blocks straight to flash.
Kind of a learning curve doing it but really nice to be able to just tell a customer to plug a USB cable into the board and have the files come straight up on his PC.
You can even have e.g. a help PDF on there :)
There are some low-end ARM USB microcontrollers that are crystal-less, must sync with the USB clock I guess. ST do some, others too I expect.