Du har alltså aldrig använt en strikt C89 kompilator. (uint8_t med vänner blev inte del av C standarden förrän med C99, och kräver att man inkluderar stdint.h för att de skall vara definierade om kompilatorn stöder dem.)
Du har också uppenbarligen inte använt en kompilator för en arkitektur med mer ovanlig ord-storlek (Som t.ex. 36-bitar datorer. Ovanliga idag, så det är inte så konstigt om du inte stött på någon, men de finns.)
Om du vill använda bytes så är char/unsigned char ett bättre alternativ. De finns garanterat i alla C kompilatorer, och är den minsta addresserbara minnesenheten i C. Dvs de är bytes, vilket inte nödvändigtvis innebär att de är 8 bitar.
Vet du inte storleken på något, så är oftast int/unsigned int det bästa valet av typ. Det skall vara den "naturliga" storleken på heltal för den arkitekturen man kompilerar för, och är därmed vanligtvis effektivast att använda för aritmetik.
size_t används normalt när man behöver beskriva storlek i minnet. För beräkningar kan det vara sub-optimalt.