Show your interest and I will add support for optiboot bootloader on different AVR microcontrollers. I'm also will add support for the Wiring bootloader - this one used on Arduino MEGA2560 boards.
Letting the beginning user select the baudrate makes life complicated for him/her. Thinking of the Nano, "old bootloader" requires 57600 while new bootloader requires 115200.
Excellent work!
As I see, you don't use any external flasher like avrdude and do upload with your own code.
Did you take the download protocol code somewhere or did you also write it yourself? what manuals did you use?