Absolutamente.
A refatoração deve ser feita em um projeto de trabalho e "aprovado". Quando todos os seus testes (nos níveis de unidade, sistema e aceitação) são aprovados, você sabe que seu produto atende aos requisitos. Ao refatorar, você pode continuar confirmando que todos os testes continuam passando. Se algum teste começar a falhar, você fez algo errado e precisará corrigi-lo. Se você tiver falhas nos testes, corrija-os antes da refatoração para garantir sempre que a refatoração não está alterando a funcionalidade do sistema.
Esse também é um momento perfeito para a refatoração, supondo que você tenha tempo e recursos para realizar a refatoração e ainda entregar o prazo e o orçamento. A refatoração agora facilitará a compreensão e a manutenção do seu sistema; assim, à medida que você adiciona ainda mais novos recursos, fica mais fácil. Você precisa lutar contra a podridão do código e a entropia do software .
Como Joel Etherton aponta nos comentários, você precisa gerenciar o escopo da refatoração. Concentre-se em refatorar as partes do sistema às quais você adicionará recursos em breve, executando refatorações que facilitarão o trabalho ou a adição de novos recursos. O uso de análise estática, ferramentas de métricas e revisões de código pode ajudar a identificar as áreas mais críticas. Você não quer perder os prazos porque estava refatorando - ainda precisa continuar agregando valor ao cliente.
Você menciona que o cliente não vê valor na refatoração. Normalmente, o cliente não se importa com a qualidade do código, mas com o produto. A refatoração facilitará a manutenção de uma alta qualidade do produto e a entrega de um produto que atenda às novas necessidades do cliente. Tente negociar tempo para refatorar em sua programação (o cliente deseja recursos X em Y dias, tente ver se você não pode obter dias Y + Z ou recursos XN, para que possa gastar tempo em design, refatoração e implementação), se desejar pode.