Bom dia Samuel. Este paciente realmente não foi declarado antes, ou seja, antes da criação da função anonima ele não existe. Quando você chama o método forEach em um array, ele espera receber uma função, e nessa função, OBRIGATORIAMENTE, você precisa passar o primeiro argumento, que é o valor atual de cada item do array. Ou seja, se o array tiver 5 itens, a função do forEach será executada 5 vezes, e para cada nova execução, o paciente é um item do array, começando pelo menor índice, até o último. Se você dar um console.log(paciente), antes do adicionaPacienteNaTabela, vai ver isto. Caso fosse necessário, você poderia passar mais um argumento, e este retornaria o índice no array do elemento paciente, exemplo:
pacientes.forEach(function(paciente, indice) {
...
})
Como eu disse, para ficar mais claro, utilize o comando console.log tanto em paciente como no indice, para você ver o que são ambos os valores. Vou deixar aqui a documentação do MDN falando sobre o forEach, e um outro artigo que também comenta de forma mais didática o assunto. Espero ter ajudado.
Só respondendo, você poderia colocar sim qualquer nome ao invés de paciente, por exemplo, xxxx, mas não é uma boa prática. Geralmente o nome que se da a este argumento é o nome de um único elemento da lista, por exemplo: Se você tiver um array chamado carros, o nome do argumento seria carro, e assim por diante, já que este argumento representa um único carro dentro do array,
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
https://www.devmedia.com.br/javascript-foreach-executando-uma-funcao-para-cada-elemento-de-um-array/39808