E per quale diavolo di motivo hanno fatto una cosa del genere ?
Io lo catalogherei come Bug
Per allinearsi con il C/C++ dove il tipo boolean è diverso dal tipo unsigned char, la differenza è che il primo può assumere solo valore 0 o 1 mentre il secondo qualunque valore compreso tra 0 e 255.
Anche se la cosa ti sembra una cavolata ha una sua ragione di essere e ti garantisco che quella è sempre stata una bella cavolata di Arduino definire il tipo bool come unsigned char invece che come boolean, comunque presente nel avrgcc, il tipo boolean è stato introdotto nel C Ansi a partire dalla versione C90.
Il vero bug era nelle precedenti versioni del IDE dove, arbitrariamente, avevano definito bool come unsigned char, cosa che potrebbe causare problemi a run time con codice scritto in C/C++ dove viene utilizzato il tipo boolean per quello che è realmente.
Esempio pratico se in una if si aspetta che il dato boolean sia esclusivamente 0 o 1 e fa un confronto if (pippo == 1), con pippo definito bool con il vecchio sistema, e pippo ha assunto il valore '5' a causa dei calcoli la if non funziona, se pippo è un vero boolean anche se il calcolo fornisce 5 pippo diventa 1.