Cut your losses. At some point you have to admit to yourself that you've been had and you won't get any kind of compensation. You're just wasting resources. Next time you'll be more apt at heeding the red flags.
Also, it's very unlikely that he's really almost done. Haven't you heard that the first 90% of the project takes 90% of the time, and the last 10% takes the other 90% of the time?
It may be emotionally hard to cut your losses, but it may be economically sound.
There's a concept in economics called "sunk costs". You can't recover your investment, so whatever your choice, the money's gone. The only choice you have at this point is: do you continue or do you stop?
Since it looks like you have to pay more for continuing (and maybe even more after that) you should contrast that to the costs of starting over. It may be better to stop and try again if that's cheaper. It feels terrible, but it can be the best choice.
You must consider the opportunity cost as well - imagine yourself three months from now. You could be three months away from this mess, well towards making your $2000 back (or better), well into a new project or the same thing with a new developer and an improved contract.
Or, you could still be arguing with this guy over code you don't have, a product he hasn't finished, and a price that's still rising (it's not going to go down), and even at best you wont trust the program or have anyone to maintain it.
Yes, many of us have felt this way. Be smart, draw a line under this and start again with a new coder. In a years time you'll look back and be glad you did. In an alternate universe you won't and it will make you miserable.