A armadilha em que cai foi ser a freelancer "legal" que queria manter os clientes felizes, então eu dizia sim para mudanças e simplesmente trabalhava horas extras para absorvê-las. Depois de alguns projetos assim, percebi que estava na verdade treinando os clientes a ver expansão de escopo como algo normal e gratuito. O que mudou as coisas para mim foi tratar solicitações de mudança como um processo de negócio de verdade, não como um favor.
Aqui está o que funciona: construa "escopo de solicitação de mudança" no seu contrato desde o primeiro dia. Quando um cliente pede algo novo no meio do projeto, você não rejeita nem absorve - você reconhece, quantifica as horas/custo extras, e apresenta como um complemento que ele pode optar por pagar ou adiar para uma fase futura. A maioria dos clientes vai desistir de metade dos pedidos assim que vê uma etiqueta de preço, e os que genuinamente querem a funcionalidade vão pagar por isso. Você não está sendo difícil, está apenas sendo claro sobre o que está incluído versus o que custa extra.
A outra coisa importante é ser bem específico no seu documento de escopo inicial. Em vez de "design responsivo", escreva "design responsivo para telefones, tablets e desktops nesses breakpoints" ou "até três rodadas de revisões incluídas". Quando está escrito, você não está improvisando conforme vai. Também, estabeleça uma data limite - tipo "escopo fechado em X data, mudanças depois disso acionam o processo de solicitação de mudança". Clientes respeitam limites muito mais do que você pensaria, especialmente se você explicar de antemão como você mantém projetos no prazo e lucrativos. Você está protegendo o relacionamento sendo transparente, não prejudicando.