USB connection to ATmega16u4 is working: serial for controlling the main application, and USB DFU (device firmware upgrade) to load the bootloader.
I’m using Dean Camera’s LUFA library for the main program – it was quick to adapt to my application, and so far it is working well.
The bootloader is the default Atmel bootloader. By pulling the !HWBL pin low at startup, execution jumps to the bootloader, allowing off-the-shelf software to be used for updating the device. One less thing to manage.