I think asking about the inner workings and neccessity of a bootloader is a relevant question that does not need to be ferreted away in Bar Sports ...
When the microchip is powered up/reset - what is it to do?
The "reset" does a few things. It zeros some hardware (not the RAM, it will contain random bytes) and sets some registers to know values, in particular the Program Counter (the address pointed to a the reset vector which is at 0000). In short, it starts the program at a defined location.
If that is your program, fine, it runs. You now want to change the program. Forgot to put in a code to allow your program to be overwritten? Your program has a fault? Damn - we're locked out.
The way that problem is solved on the Arduino, is that the program that executes is The Bootloader. It first checks if the Serial line is sending a new program. If not, it goes to the start of "your program".
"Your program" is just two functions, setup and loop. The program, which the bootloader jumps to once it is done, is the "Arduino core", which starts by initialising the defined RAM variables to the values you have given and zero if you did not (so "your RAM" does not contain random bytes), setting ports, timers and interrupts to good/known values. Then it calls setup and loop as documented and your sketch is running.
The "New program?"-test blinks LED 13 (dont know why) while it waits for some Serial input. A few bytes are exchanged so the Loader program on the pc and the Arduino match and then the program bytes are transferred and stored in your chip. When it is done, it jumps to "Your program" the same way as if no bytes had been transferred. My experience is that if there is no USB hooked up at all, the bootloader determines quickly nothing is comming and the the main program starts quicker.
Note that the bootloader code, which also sits in the same flash as your program, is NOT overwritten. It executes on every reset, and is never changed during normal Arduino IDE programming and operation.
As the others have written, there is another solution. It is to solve the problem - how did the bootloader get in there? After the chip is manufactured all the flash bytes contain the same value (all zeros or ones, doenst matter which, useless). So there must be method whereby some bytes are set. This is handled by an internal hardware bootloader (nothing to do with the bootloader described previously). It is triggered by special pulsing Reset and the pins 11-12-13 (ie. the SPI interface), and then the bytes being loaded through the SPI with a simple protocol (if any)
So really when you hit reset
1: Circuitry inside chip set to known values
2: Is the hardware bootloaader triggered?
Yes: 3: starts reading bytes at SPI port and stores in flash. <details missing>
3: chip program starts, begins at 0000->vector->Bootloader
4: Bootloader checks Serial line/USB, includes blinking the 13 LED
5: New program?
Yes: 6: start loading bytes <details missing>
6: Jump to arduino core main()
7: Arduino core does more initialisation of ports and memory
8: call setup()
8b: call loop() again and again, forever
Additions and corrections welcome.
Very informative, thank you very much for having taken the time to thoroughly answer my question.