Daré una respuesta un poco más teórica; Las otras respuestas son bastante buenas desde una perspectiva práctica. Un gestor de arranque es un código que reside en un segmento especial de memoria flash. El código que reside en ese segmento puede ejecutar instrucciones de autoprogramación, lo que permite modificar la memoria flash (es decir, donde reside el código de usuario) sin un programador convencional (es decir, ISP de programación en el sistema o HVP de programación de alto voltaje) como el STK500 o AVRISP mkII.
En principio, la Rutina de servicio de interrupción de datos (ISR) de UART recibe una llamada de función al código del cargador de arranque que copia la imagen del programa que se envía en serie al espacio del programa del usuario en la memoria flash. Al inicio, cualquier programa que esté en el chip comienza a ejecutarse, pero si los datos seriales formados adecuadamente se reciben desde el principio, el AVR entra en una especie de modo de auto-programación. Hay cierta lógica en el UART ISR que solo difiere en el código del cargador de arranque durante un corto período de tiempo durante el inicio. Los detalles son un poco más complicados que eso, pero esa es la idea básica.
Lo bueno de esto es que puedes comprar un Arduino, y nada más, descargar el Entorno de Desarrollo Integrado (IDE) gratuito, y comenzar a escribir Arduino Sketches (programas), y descargarlos en el AVR así, por USB no menos gracias al elegante y pequeño chip FTDI IC que está integrado en la placa Arduino.