"Me chamaram para fazer X, mas não entendem nada de X"
Isso é a coisa mais normal do mundo, não é exclusivo da nossa área.
Por exemplo, eu não entendo nada de marcenaria, então contratei um marceneiro pra fazer os armários de casa. E claro que fiquei dando palpites e pedindo coisas que nem sabia se eram viáveis. Afinal, ele é o especialista, não eu. Eu sou o cliente e digo o que preciso, e ele me diz o que é e o que não é possível, e principalmente, quanto custa e quanto tempo demora cada coisa.
Ou seja, a esmagadarora maioria dos seus clientes serão pessoas que não entendem de software. É o normal, o padrão, a regra. Tentar lutar contra isso é dar murro em ponta de faca.
O seu erro, como já disseram, foi não definir o escopo e nem ter um processo para gerenciar as mudanças. Desde o começo tinha que deixar claro, de preferência formalmente (contrato), o que está no escopo, e como seriam cobradas as alterações. Cada coisa nova que o cliente pede é um trabalho a mais pra vc. E isso tem que ficar bem claro.
Claro que agora vai ficar mais difícil negociar, mas uma hora tem que mandar a real: se agora ele quer outra coisa, completamente diferente e mais complexa, tem que ser cobrado de acordo.
Voltando à analogia do marceneiro: se no meio do projeto eu peço mais uma prateleira, ele vai me cobrar a mais. Se eu mudo de ideia e peço pra mudar tudo, ou se agora eu quero um armário novo ou diferente, ele vai ter mais trabalho e vai me cobrar a mais. Com software não é tão diferente assim.
E se ele não gostar, sinceramente, que se dane. Se ele não quer pagar pelo que pede a mais, então ele só quer um otário pra fazer tudo de graça pra ele. Fuja de gente assim, isso nem dá pra chamar de cliente, é só um parasita mesmo.