Usually, if you want to send data from a file to your device, you can just read the file as you would do normally, either in text mode or in binary mode (if all you want is data) and send the resulting bytes via LibUSB.
As said earlier, LibUSB allows you to sand anything in its unsigned char* parameter, it just says it will send the data byte per byte (hence the size parameter is in bytes)
I am actually doing a bootloader with LibUSB, and it works fine!
What LibUSB will NOT do, is have your device recognized as a standard mass storage device.
In order to have a standard mass storage device, you need to define the device as an MSD device, and attach it to the host driver corresponding to MSD.
Something to know, is that the OS can handle the MSD by itself. All you need to do is properly define the msd usb descriptors, and handle the write / read requests properly. The memory will, physically, be a storage on your device of XXX bytes. The host, when formatting the device (can be done from the standard OS user interface (eg in windows right click / format), will allocate memory for the file system index file (especially if it does not detect any file system) This should work.
Cheers!
Paul