Olá, Gabriel!
Entendo sua confusão, mas vamos esclarecer isso juntos. Quando dizemos que o parâmetro "fim" não é necessário para o método slice(), estamos querendo dizer que ele é opcional. Se você não fornecer esse parâmetro, o método slice() irá retornar um novo array que começa na posição "início" e vai até o final do array original.
Por exemplo, se tivermos um array como let arr = [1, 2, 3, 4, 5] e usarmos o método slice() como let newArr = arr.slice(2);, o newArr será [3, 4, 5]. Nesse caso, não especificamos um ponto final, então o slice() pegou todos os elementos a partir do índice 2 (terceiro elemento) até o final do array.
No entanto, você está correto ao dizer que, se especificarmos ambos os parâmetros "início" e "fim", o "fim" não será incluído no novo array. Por exemplo, se fizermos let newArr = arr.slice(1, 3);, o newArr será [2, 3], ou seja, começará no índice 1 (segundo elemento) e terminará no índice 3, mas sem incluir o elemento no índice 3.
Espero que isso esclareça sua dúvida sobre o método slice(). A documentação da MDN é realmente uma ótima fonte de informações, mas às vezes pode ser um pouco confusa. Continue explorando e perguntando sempre que tiver dúvidas!
Espero ter ajudado e bons estudos!