You've had so many good responses already. I want to encourage you. You're doing a great job. I don't think she's being defiant at all, she's just being a toddler. I would not punish her. Just continue to encourage her. When you put her to bed at night, after a day with no accidents, tell her how proud you are of her. When she tells you she has to go potty, be really excited about it. My daughter will be 3 in a few weeks and she's been potty-trained for a year. It took a good month before she was no longer a ticking timebomb in public, and three until I could really call her potty-trained. Only after six months or so did she consistently tell me she had to go. I cannot tell you how many accidents she had during those first six months. She still has accidents... there is a lot going on in a three-year-old's world and she's not paying attention until it's too late. You are still going to have to ask your girl if she has to go potty, pay attention to the last time she went and push it if you know she's due. My daughter is pretty "regular" so if she hasn't pooped by her normal time, I'm asking.
As far as wasting money, sometimes we threw the underwear away, sometimes not. When I think of all of the money we've saved on diapers, I don't mind a bit throwing away a pair of undies here or there.
Stick with it. Be patient. She'll be fine as long as you encourage her. You're doing great, seriously.