Serial.begin() not needed???

The only time the program button should need to be manually pressed is when a program has crashed (in a way that makes it impossible to handle USB interrupts) or uses a configuration that has the USB serial port/emulation disabled. That isn't the case here.

As I said, you can test the sketch yourself (or any sketch with an empty loop() function) and see that it doesn't need the program button to trigger reprogramming.
I have had programs running that have NOT CRASHED but still required the PROGRAM button to be pressed.