Fala Renato, tudo bem ?
Na verdade seu código ficou bem legal. Apenas algumas pequenas coisa poderiam ser citadas.
A primeira delas sobre a indentação do código (que reconheço, pode ser que a culpa seja do editor de código do tópico mas enfim). A ideia é que qualquer bloco de código iniciado (entre abertura e fechamento de chaves) fique visível na sua coluna, ou seja, que seja possível visualizar o início e fim do bloco na vertical tendo como base a coluna onde o código se inicia.
Veja o caso do seu laço de repetição. As variáveis definidas internamente pra recuperar o texto do usuário, o if, etc estão na mesma coluna do for
dificultando a visualização do ciclo de vida do laco.
for (var contador = 1; contador <= 3; contador++) {
var loginInformado = prompt("Informe seu login");
var senhaInformada = prompt("Informe sua senha");
if( loginCadastrado == loginInformado && senhaCadastrada == senhaInformada ) {
alert("Bem-vindo ao sistema " + loginInformado);
contador = 4;
}// fechamento do if
...
...
}//fechamento do for
Veja como fica mais claro a identificação de cada bloco.
Outra coisa que poderia ser adicionada é o uso da clausula brake;
ao invés de forçar com que o novo teste seja falso com contador = 4;
. A clausula tem exatamente a semântica de termino de iterações entre laços de repetição. Ganhamos semântica no código e até mesmo performance, pois não será necessário alterar o valor da variável e testá-la novamente para verificar a necessidade de uma nova iteração.
Somente esses pequenos ajustes eu consegui enxergar. No mais seu código ficou bem legal. Suas variáveis estão com bons nomes, facilitando o entendimento do código, seus trechos e sentenças estão bem separados o que também ajuda. Continue sempre escrevendo código com foco no entendimento por seres humanos e não por interpretadores e compiladores, seus colegas de equipe e projeto agradecerão por isso (e você também =))
Mandou bem. Bons estudos!