Made My Own Arduino Board - ATMEGA32U4 - Bootloader Questions

a .hex file is in Intel Hex format, it's ASCII, human readable, not binary. You need two ASCII characters to represent every actual byte, plus there's some overhead in the Intel Hex format to indicate address and checksums. So it's file size does not indicate the true size of memory you need.

also keep in mind, your microcontroller has 32K total, the bootloader can occupy up to 4K, thus you have 28K remaining for application. So your reasoning is wrong in your original post.