Então Rogério, vamos por partes.
O retorno de uma função em javascript é fracamente tipado, basta retornar "algo" e o trecho invocador deste método recebe este retorno e o manipula. No nosso caso, retornamos um booleano e o método invocador o armazenou em uma variável para verificar (usando o if) se o retorno foi verdadeiro ou falso.
Pense o seguinte, a cada novo valor digitado estamos perguntando para a função "verificarNumeroJaInformado" (função, olhe para mim se este valor já está dentro desta lista. Então ela responde SIM = true ou Não = false).
Quanto ao While, usamos o bloco do {.... } while que diz ao browser,
"Browser, execute esse trecho de código enquanto a minha condição (neste caso o retorno da função "verificarNumeroJaInformado" for verdadeiro), ou seja, continue avisando meu usuário que o número já foi informado e peça um novo para ele até que o número seja um não usado ainda", cada vez que ele repete a mensagem de numero ja utilizado, o valor do i continua igual e somente vai ser incrementado a cada vez que ele informar um valor novo.