Lo que sucede es que la variable posicion solo esta definida dentro del ciclo for, como tu mensaje de que el usuario erró este fuera del ciclo no identifica correctamente una posicion dentro de tu arreglo,lo que aparece en tu mensaje alert es la magnitud del arreglo, es decir, cuantos datos contiene, no cuales son..
Una solución si solo quieres informar al usuario de uno de los posibles resultados dentro del arreglo es mejor poner el indice 0, pues así informas del primer valor, y no te generarias errores al poner otro número de indice en caso de que tu arreglo variara en tamaño :
if (encontrado == false) {
alert("Usted erro, el numero es " + secretos[0]);
}
Ahora si lo que quisieras informar cuales eran todas las posibles respuestas, tendrías 2 opciones hacerlo manual o también en un ciclo:
Manual
El mensaje se despliega en un solo alert.
if (encontrado == false){
alert("Usted erró, el número correcto podía ser uno de los siguientes: " + secretos[0] + ", " + secretos[1] + ", " + secretos[2] + " ó " + secretos[3]);
}
Ciclo
Se despliegan mensajes conteniendo cada respuesta
if (encontrado == false){
alert("Usted erró, el número correcto podía ser uno de los siguientes:");
for (contador = 0; contador <= 3; contador ++){
alert(secretos[contador]);
}
}