What are some reasons my atmega32u4 loses program when disconnected from power?
Well, the atmega MCUs are flash-based, so they should never 'lose the program' without an explicit erase cycle.  However, it's possible something is preventing the chip from starting your program.  Have you tried reading out the program stored on the chip after power-cycling the board and comparing it to the original?  If it matches, this will rule out the program getting 'lost'.  That leaves a couple of possibilities.  One is a problem with the reset circuitry that prevents the chip from exiting reset until the USB cable is connected and the programming software is started.  Another possible problem is that the chip has a bad bootloader installed on it that doesn't automatically start the user code.  That could be a pretty simple fix, just flash the correct bootloader using an ISP programmer or another board that's configured to act as an ISP programmer.  Another possibility is the chip itself is a knockoff...in which case all bets are off.