Reuse USB port on Arduino for other tasks

Taking it another direction, I just got my prototype PCBs for something like this. Basically it takes another microcontroller with the AVR-USB code and slaps it on top of the Arduino...on the physical level, rather than the software level. This will leave a lot of CPU time available on the Arduino in case you need to do other things like signal processing, and will work with unmodified Arduino software. However, follower's solution is definitely best for minimal external hardware or Arduino devices with other physical formats.