Se deja en 20 para que solo puedas escribir en las posiciones 0 a la 19 como dices. ya que si lo dejas en 19 solo podras escribir de la position 0 a la 18 sin errores.
Si si es posible declarar un arreglo de 20 y seguir escribiendo en las posiciones 21,22, 23, 1000 etc.. nada te lo impide recordar que las variables estan continuas en la memoria y estarias sobreescribiendo valores en otras variables.
Veamos el siguien codigo:
int A;
char hola[3];
A = 0x41414141;
hola[0] = 'H';
hola[1] = 'o';
hola[2] = 'l';
hola[3] = 'a';
Si bien la salida puede variar de un sistema a otro en mi sistema imprime:
Y por eso es que aunque si sea sufiente declarar el arreglo con 3 para la palabra en cuestion es mejor dejar la declaración en Numeros "Humanos".
Saludos