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 tiene permiso para ejecutar instrucciones de autoprogramación, lo que hace posible 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 Programación de alto voltaje HVP) como el STK500 o AVRISP mkII.
En principio, la Rutina del Servicio de Interrupción de Datos de Recibo de UART (ISR) realiza 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. En el inicio, cualquier programa que esté en el chip comienza a ejecutarse, pero si se reciben los datos en serie formados de manera adecuada, el AVR entra en una especie de modo de autoprogramación. Existe alguna lógica en el ISR de UART que solo difiere al 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 Bocetos de Arduino (programas), y descargarlos en el AVR así, a través de USB no menos gracias al pequeño chip FTDI IC integrado en la placa Arduino.