Olá, Franco, como vai?
Seu código está bem organizado e a separação das responsabilidades entre os arquivos ficou clara, o que é um ponto positivo. A função de limpeza de texto cumpre bem o papel de normalizar a entrada e a contagem de palavras está coerente com a proposta do exercício.
Existe apenas um detalhe que merece correção no main.py. Na linha onde você tenta exibir a mensagem de erro para entrada vazia, foi utilizado print:('Erro: Nenhuma frase foi digitada.'). Em Python, isso gera um erro de sintaxe. O correto é utilizar print('Erro: Nenhuma frase foi digitada.'). Fora isso, o fluxo do programa está consistente e funciona conforme o esperado.
Obrigado por compartilhar sua solução e fique à vontade para continuar trazendo seus projetos e dúvidas aqui no fórum, que está à disposição para trocar ideias e evoluir junto.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!