Hi.
Das liegt daran, das man sich die Möglichkeit offen halten möchte einen ungültigen (Zeichen-)Wert zu setzen, der einen Fehler anzeigt. Z.B. gibt die Funktion getc einen unsigned char gecastet in einen int zurück, ansonsten EOF. EOF darf nicht im normalen Wertebereich eines unsigned char liegen - sonst wäre es ja ein ganz normales Zeichen. EOF hat normalerweise den Wert -1. Um diesen Wert zurückgeben zu können kann kein char Typ verwendet werden (auch kein signed char, denn das wäre ja auch (gecastet in einen unsigned char) ein ganz normales Zeichen).
Alle Zeichenfunktionen in ctype.h verwenden deshalb Integer als Ein-/Ausgabe.
Gruß