Der Arduino ist eigentlich nichts anderes als ein Armega µContoller (beim Uno ein Atmega328) dem man in ein kompatibles Stecksystem gebaut und mit einer komfortablen Programmierumgebung versehen hat.
Da Atmega nicht direkt an einer USB Schnittstelle funktioniert wurde dem Bord noch ein Atmega16u verpasst der die USB Schnittstelle händelt.

Im Atemga328  ist eine Bootsoftware installiert die die Software über die serielle Schnittstelle lädt.  Wer die Programmierumgebung nicht benötigt kann auch über die ISP Schnittstelle programmieren. Der Bootloader lässt sich auch entfernen dann hat man noch mehr Speicher zur Verfügung es ist dann aber kein Arduino mehr.

Installation des Bootloader...  in kürze.