Ele funciona, porém quando há palavras suficientes para quebrar a linha no parágrafo (new line), ele computa essa quebra como 7 espaços
teste:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="css/reset.css">
<link rel="stylesheet" href="css/estilos.css">
<title>Typer JQuery</title>
</head>
<body>
<h1 class="title">Typer JQuery</h1>
<p class="frase">Lorem ipsum dolor sit amet consectetur adipisicing elit. Saepe placeat ipsa exercitationem, aut
deleniti accusantium blanditiis nisi illum ab, unde neque. Laborum minus ad eius ducimus, facilis atque
quibusdam dignissimos.</p>
<ul>
<li> <span id="words-amount">X</span> palavras</li>
<li>10 segundos</li>
</ul>
<script src="js/jquery.js"></script>
<script src="js/main.js"></script>
</body>
</html>
com esse teste ele retorna 44 palavras, porém, só existem 30 palavras no parágrafo.