Olá, Ramon!
Nesse caso, a variável "segredos" é uma só, mas ela vai sendo complementada ao longo da execução do código.
Veja, inicialmente, na função "sorteiaNumeros" ela é declarada assim:
var segredos = [];
É como se disséssemos para o sistema: "quero criar esta variável que se chamará segredos e receberá como valor um array a ser preenchido na sequência da execução do código". Lembrando que array é um conjunto de valores com posição definida.
Ao final da função "sorteiaNumeros", esse array (da variável segredos) estará preenchido com os números sorteados pela função "sorteia", na quantidade definida quando a função "sorteiaNumeros" é chamada (dentro da variável segredos):
var segredos = sorteiaNumeros(3);
Note que aqui, o array da variável segredos será preenchido com os três números que serão sorteados.
Se nós não tivéssemos declarado inicialmente que esta variável receberia um array [ ], não seria possível armazenar dentro dela, ao mesmo tempo, os três números sorteados, pois, em condições normais, uma variável só pode receber um valor de cada vez.
Então, ao final da função "sorteiaNumeros" o conteúdo do array é definido (até que ocorra um novo sorteio) pelo comando "return":
return segredos;
E poderá ser visualizado no console pelo comando "console.log":
console.log(segredos);
Finalmente, na função "verifica", será verificado se o número que o usuário digitou é igual a algum dos três números sorteados que preencheram o array da variável segredos declarada inicialmente:
function verifica() {
var achou = false;
for(var posicao = 0; posicao < segredos.length; posicao++) {
if(input.value == segredos[posicao]) {
alert("Você ACERTOU!");
achou = true;
break;
}
}
if(achou == false) {
alert("Você ERROU!");
}
Espero ter contribuído para o esclarecimento da sua dúvida.
Bons estudos!