Getting started with AVR programming concepts
AVR microcontrollers (and most modern µC) contain special hardware specifically for programming directly using a combination of the SPI port (called ISP for this special case) and the reset pin.

This is a very convenient feature because you don't need to worry about bootloaders or memory offsets or anything else.  You can program the chips separately or after they are installed.

To use a different method for programming the flash, you need to use a bootloader that instructs the chip on how to accept this.  UART, for example.

Some AVRs can use other methods as well, high voltage programming for instance, that do not use a bootloader.

The choice comes down to what is most convenient/useful for you.

One nice thing about a bootloader, is it potentially allows an easy way to apply field upgrades to your firmware.

As for your analogy:

The hex file is the program you are loading into the flash on the microcontroller.  The programmer is the physical hardware that will stream this data.  AVRDUDE is the software that runs this process.