Hello, thorntonforce
I have the same problem on it, and I have got a method to deal with it.
As you said, burn the bootloader of Pro-Micro or LilyPadUSB could make the self-made ATMega32U4 arduino board work. But I need the system to recognize it as arduino-micro or leonardo, so that I could use the simulink coder to generate code for it(Simulink coder can't generate spi code for LilyPadUSB and don't support code generation for Pro-Micro).
First, download the caterina bootloader source code, and put the two .c files, two .h files and Makefile in the same folder.
Revise the makefile.
In the line 49, uncomment the VID and PID for leonardo
# USB vendor ID (VID)
# reuse of this VID by others is forbidden by USB-IF
# official Arduino LLC VID
VID = 0x2341
# USB product ID (PID)
# official Leonardo PID
PID = 0x0036
# official Micro PID
# PID = 0x0037
# official Esplora PID
# PID = 0x003C
In the line 88, change the f_cpu to 8000000
F_CPU = 8000000
In the line 130, change the path to the LUFA library
LUFA_PATH = LUFA-111009
Then download the LUFA library 111009:LUFA
The file could be find at 'Show/Hide Old Releases' at the bottom of the page.
Extract the LUFA-111009 to the caterina bootloader source code folder and change the name of the LUFA library folder to 'LUFA-111009'(as defined in the makefile)
Install winavr:Winavr
Note:The installation program of winavr would delete the system environment variables, so you should better backup the system environment variables before installation or do it in a virtual machine
Open the Windows Command Line, and enter the caterina bootloader source code folder. Type 'make' and the hex file of leonardo bootloader will be generated. It could be burned to the ATmega32 board by USBASP.
After I burned the bootloader, the board that I made is recognized as the ‘Arduino Leonardo Bootloader’. Since I haven't download program to the board, it stops at bootloader.
I tried to download a program to it, but after that, the board couldn't be recognized by computer. If I reset ATmega32U4. Computer could recognize the Leonardo Bootloader, but after a while, the board couldn't be recognized again.
I could set the board type as LilyPadUSB in arduino IDE and downloaded the program to the board, but the board was recognized as LilyPadUSB in computer. When I reset the ATmega32U4, the computer recognized the board as Leonardo Bootloader, after a while, it was recognized as LilyPadUSB.
It seems that after the reset, the ATmega32U4 entered the bootloader, after a while, the program began to run. It's like that there's some special parameter about cpu clock in the program that compiled by Arduino IDE.
I found a text file 'boards.txt' under $Arduino Installation Path$\hardware\arduino\avr.
I found the line
leonardo.build.f_cpu=16000000L
And changed the f_cpu to 8000000L.
This parameter will affect the build process of Arduino IDE. After I changed it, the program could work on my board, and it was recognized as leonardo.
Now the 8MHz bootloader for Arduino ATmega32U4 board has been done, but I still have some problems with it
I thought I could use simulink to generate code for my board. But when I tried to do it, after the program generated by simulink downloaded to the board, it wasn't recognized again.

There should be some file that defines the cpu clock of board under simulink support package folder, not the 'board.txt' file(I had revised it). Is there anyone know which is the file?
Sorry for my expression. I'm not a native speaker, so there meybe so many grammar faults. 