Olá, Jhones! Beleza, cara? =)
O problema do seu código é esse: input.value = "";.
Quando você escreve esse código, você está alterando o valor de input para uma String vazia...
Repare no seu laço for:
for (var posicao = 0; posicao < segredos.length; segredos++) {
    if (input.value == segredos[posicao]) {
        achou = true;
        break;
    }
    input.value = "";
    input.focus();
}
A primeira coisa que podemos ver logo na assinatura do loop é que estamos, de fato, percorrendo todo o array segredos.
Mas o que esse código faz em cada posição desse array? A primeira coisa é verificar se o valor de input é o mesmo que a posição do array. Até aí, legal, é o que queremos fazer... E se for igual? Nesse caso alteramos a variável achou para true e podemos quebrar o loop (comando break).
Mas... E se o valor não for igual à primeira posição? Nesse caso, repare que ele não entrará no if, mas continuará a execução:
input.value = "";
input.focus();
O código está alterando o valor do input! Se ele não for igual à primeira posição, ele já é alterado para uma String vazia, o que vai acarretar no if nunca mais sendo executado!
Acredito que o que você queria fazer, é limpar o campo e colocar o foco no input, correto?
Nesse caso, o melhor seria fazer isso após o for! Pois assim, quer dizer que percorremos todas as posições e não temos mais problema em alterar seu valor, assim:
function verifica() {
    var achou = false;
    for (var posicao = 0; posicao < segredos.length; posicao++) {
        if (input.value == segredos[posicao]) {
            achou = true;
            break;
        }
    }
    input.value = "";
    input.focus();
    if (achou == true) {
        alert("Você acertou!");
    }
    if (achou == false) {
        alert("Você errou!");
    }
}
Espero ter ajudado, mas qualquer dúvida que possa ter restado, não hesite em perguntar que iremos ajudá-lo! =)
Abraço e bons estudos,
Fábio