José, apenas complementando o que o Lucas e o Alisson já disseram:
Imagine que você tem 3 funcionários: Maria, Davi e Samara. Imagine que você colocou cada um deles em uma posição do array. Lembre-se que a alocação do array vai de 0 (zero) até N-1 (número de posições - [menos] 1). Seu array ficaria assim:
Empregados[0] = Maria
Empregados[1] = Davi
Empregados[2] = Samara
Por isso que, quando você varre o array até N-1, ele vai de 0 até 3-1 (2), que é, de fato, o último elemento do array.
Ao que parece, sua dúvida reside na sequência de execução das 3 instruções do laço for:
O laço for possui 3 instruções. Pegando seu exemplo: for (int i = 0; i < this.livre; i++).
int i = 0; (primeira)
i < this.livre; (segunda)
i++ (terceira)
Quando inicia o laço for, ele executa, nessa ordem:
1) primeira instrução (int i = 0) (apenas uma única vez!)
2) segunda instrução (i < this.livre) (uma vez)
3) terceira instrução (i++) (uma vez)
4) a partir da terceira instrução, ele executa a segunda e terceira instruções alternadamente até que a segunda instrução seja false. Ou seja, ele incrementa i, testa se i é menor que this.livre, incrementa i, testa se i é menor que this.livre, incrementa i, testa se i é menor que this.livre, até que i não seja não seja menor que this.livre, isso significa que a instrução retorna false. Nesse momento, ele interrompe o laço.
Assim, no seu último exemplo, quando no laço for incrementa i e ele fica valendo 5, o laço testa se i (5) é menor que this.livre (5). Como 5 não é menor que 5, ele sai do laço.
Espero ter ajudado.
Abraço.