My goal was to embed a USB hub and USB stick in a USB gamepad, with the stick configured to run a front-end and emulators. This is to be an XMAS gift for my 11YO son, who is Mario crazy.
I finished the project last night. Here are the details:
SOFTWARE
This ended up being non-trivial.
*) I had to find emulators that didn't need to install, since this was supposed to be a portable gamepad. I ended up using Nestopia, zsnes, Project64, Visual Gameboy, Fusion, and z26. I then had to configure a gamepad to work in each one, and set each to start in full screen and exit on the ESC key. This last bit required some googling for almost every emulator. Each emulator had some config setting or ini file that needed the GUI turned off, or the ESC key remapped. Project64 still requires an alt-F4 to quit. I don't expect z26 to ever be used.

*) I had to find a front-end that did not require an install, supported all of the emulators I wanted, AND supported relative paths. Atomic FE was the only one I found, and I went through about a dozen, including all the big boys. Hyperspin doesn't support newer emulators. Relative paths and "no install/registry" were a big killer for most.
*) Atomic FE has some quirks. Best Practices: Always rebuild after adding a screen. (Right click on screens list, select Rebuild/Repair) I corrupted several attempts by not doing so. I also did NOT use the pre-configured emulators because they all seem to have a launcher. The additional complexity of the launcher made me very nervous (relative paths.) After using the Atomic Studio tool to configure the screen emulators with full paths I then opened the config files with Notepad and hand-edited them to relative paths. These included: config.atomic and atomic020.cfg in the top-level atomicFE directory. Then in my projects directory I had to edit: [name].LIST.CFG (one for each emulator/screen) and my [blah].SELECTOR.CFG files. In each case I shortened the file paths to be relative to the top level atomic FE directory. I generally DID NOT include a '.\' at the start.
*) I put my emulator roms in the same directory and the emulator proper. Messy, but it avoided passing a relative path to an emulator, which I did not care to figure out. This requires the command line argument setting in atomic FE to be something like [ROMNAME].[ROMEXT]. Note that it does NOT include the [ROMDIR] (IE: it's NOT set to be [ROMDIR][ROMNAME].[ROMEXT]) This avoids passing a full or relative path to the emulator. ROM lists are built on the fly. I downloaded some snaps and layouts for each emulator to make it look pretty.
*) Windows 7 no longer lets a USB device autorun, so I just have a shortcut on the top level of the thumb drive, as well as the atomicfe directory.
*) I _feel_ there were issues with rom names also. More specifically, spaces in names. I ended up having to edit all of the rom names to remove space, and then of course all of the snap names to match the ROM names. I'm not sure if this was an emulator issue, an atomicFE issue, or some issue with an emulator I tried prior to atomicfe. I REALLY don't understand rom file naming conventions, or the tools (good, etc) that attempt to manage them. I mean seriously, it's like I have a mental block in this area.
HARDWARE
In short, I housed a USB hub in a gamepad, attached the gamepad cable to it as well as a USB stick, and ran the hub cable out the back of the gamepad where the gamepad cable usually exits. Thus the gamepad now serves as a USB hub and a USB stick also.
I opened up a Logitech F310 gamepad and cleared out the plastic tabs from the lower right side with needle-nose vice-grips and an old wood chisel. (I hope I get that dremel for Xmas ...) I then chopped/shortened the cord from the controlled so it would just reach the end of that part of the controller. I took a 4-port USB hub apart and removed 3 of the connectors. (I tried to desolder them, but that didn't work, so I wiggled them out/broke them out, being careful not to damage the board. I then trimmed the pcb with a pair of tin snips to get rid of as much of the blank PCB as I could. (I didn't touch the 2 unused USB headers, just to be safe. I wasn't sure if I could trim them off without consequences or not.) In the process I pulled one leg out of a cap and two wire came off the USB connector. I just showed the leg back in and re-soldered the two wires back. (I hope I get a finer tip for my iron as well..) I then soldered the gamepad cables, 4 or them, to one of the unused headers. Recall, I broke them off. I ended up grabbing the broken off pins with some dykes from the hear while applying heat from the iron on the front, to clean out the holes. This allowed me to insert the wires from the gamepad into the header holes. Finally, I took a low-profile USB stick, took off the plastic end, and plugged it in to the hub and put the controller back together. Controller looks great and works great, except it's just a tad loose in the lower right corner where I had to remove the screw holder. Next time I may look for a rectangle hub instead of a square hub, so I would not have to remove the screw hole. Or, use a gamepad with more room inside. The F310 was pretty tight to begin with.
That's it. I kept a copy of the front-end and emulators on my computer so I could work on adding new emulators, like Intellivision, Gamecube, and C64. I can update his just by plugging his gamepad it. My 11YO son now gets an emulator machine gamepad for xmas. He will have no idea what went in to it.