Lesson hopefully learned: use a clear, concise scope of work (SoW). What you are experiencing is called "scope creep" by many people.
Scope Creep is when a client expects you to give more and more than what the original Scope of Work allow, while paying you no more. Unfortunately, it can be hard to defend against your first few times.
First tip is to explain, clearly, in writing/email, that you will do x, y and z features as part of the scope, which entails using or doing only a, b and c. Let them know that your hourly rate for any additional work outside of this scope is $xxx/hour.
Next, stick to it. They will likely try again to get more features for free, expecting that it is very quick for you. Be prepared to defend your position. Explain the time commitments you have with other customers, your work-life balance, and any extra costs or restrictions you have.
Finally, have the balls (so to speak) to say no to additional things, if they keep persisting. Finish off what you have promised to do, then let the client know you can no longer work with them under the conditions set out. Will they be angry? Likely. But you need to be able to stand up for yourself, and freelancers all around, and make it clear that there is a scope for a reason. What may help is knowing what the client does or sells, and flip it around on them: if a customer asked for x, then just as you were almost finished, asked why y wasn't done for the same cost, what would you say?
The first couple times you do this, it may be hard, especially if you're a nice person. But realize that everyone in the world is trying to take your money. Just like you're trying to take their money by working for them (although, I doubt you charge more than you say you would, just a metaphor). Be nice, courteous, and respectful the entire time. Do NOT raise your voice, or blame the customer at all!