Eu vejo serviços no DDD como resultado da inversão de dependência .
Se você usar dependências "simples", seu código de domínio chamaria o banco de dados para salvar ou consultar uma entidade, ou fábrica, que cria uma entidade, vinculada ao banco de dados ou serviço externo ou algum outro tipo de código de infraestrutura.
Mas não é assim que o código do domínio deve ser. O código do domínio não deve depender do código da infraestrutura. Como essa dependência dificulta o teste e, possivelmente, a reutilização. É por isso que você inverte essa dependência. Você faz com que o código de infraestrutura dependa do código do domínio. E para fazer isso, você precisa apresentar uma abstração. Uma abstração que define qual comportamento o código de domínio espera que seja implementado pela infraestrutura.
E os serviços no DDD são essa abstração. Na maioria dos casos, para o código de domínio, esses serviços devem ser interfaces simples. E a implementação deve estar no código de infraestrutura, que depende dessas interfaces.