Ich kenne die tiefen Details nicht. Aus meinem eher oberflächlichen Wissen mutmaße ich, dass durch das flashen eines Anwenderprogramms das mit der Arduino-IDE geschrieben wurde zusammen mit dem ESP32-core sozusagen eine ureigene very special customised firmware auf den ESP32 geflasht wird.
Wenn man das Blink LED-Beispiel compiliert und dann auf den ESP32 flasht dann hat man eine "firmware" die dann nix weiter macht als eben die Onboard-LED blinken zu lassen.
Wenn man mehr haben will programmiert man das einfach dazu. Wirklich ganz genauso wie man es mit dem Arduino auch machen würde.
Beim nackten Arduino hat man im wesentlichen so Sachen wie "Serial".
Sobald man mehr machen möchte bindet man die Sachen per #include-Befehl ein
zum Beispiel
#include <Wire.h>
um I2C und SPI-Funktionalität zu bekommen.
Das mach man beim ESP32 ganz genauso
#include <Wire.h>
Beim ESP32 kommt dann noch WiFi usw. dazu
#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
usw. Eben das was man braucht. Und dadurch entsteht dann jeweils eine customised firmware.
vgs