Olá, Igor.
Cara, eu fiquei com a mesmissíma dúvida e só fui entender depois de quebrar a cabeça.
A confusão começa pois usamos a palavra contexto como parâmetro que é passado para a função 'alterarContexto' indicando qual botão foi clicado, e em seguida, usamos o mesmo nome no forEach. Parece que estamos passando o mesmo parâmetro em ambos os casos, mas não.
No Caso do forEach, a palavra "contexto" se refere ao elemento em si. Ou seja, o Elemento da lista que o ForEach percorreu. Como o ForEach percorre toda a lista, ele vai indo de elemento em elemento e removendo a classe "active".
Faz o teste, dentro do forEach muda a palavra contexto para outra qualquer. O resultado vai ser o mesmo pois a palavra que está ali é simplesmente uma referência ao elemento da lista.
Bom, pelo menos isso foi o que entendi e que fez sentido pra mim. Espero ter ajudado.