M.,
My almost 4 year old son does this too, and it started just after he turned 3. My friends in early childhood development tell me that, while infuriating at times, it is completely normal. It also shows an high level of intelligence and developing intellect. She is creating alternative realities and testing them out on you. She wants to see what happens when she lies to you; what your reaction will be.
In our house, deal with the small lies as such:
"My toys got themselves out". We'd say, "wouldn't it be a neat world where toys could come alive and play with you?"
We try to respond to him with a comment about, "in your imagination?" so that he can change his story without feeling bad about lying. We also try to engage him to start a conversation about it. After a few minutes we ask again, and he usually will tell the truth.
As for situations when someone has been hurt (he as a baby sister) or he is engaging in dangerous behavior, we have a zero tolerance policy. Although he hasn't stolen anything yet, this is another point of zero tolerance. We tell him we know that he's not telling the truth and ask him to think about it. Then ask again. He'll persist for a while, but in between asking him again, we'll tell him "we are not mad, but we need the truth. We need him to be kind and safe with himself and others and we will not tolerate unsafe/unkind behavior". Finally, he'll tell the truth and we'll add, "I'm sure you are sorry for what you did, right?" We'll also add, "thank you for telling us the truth. It was hard to do, but it was the right thing to do. We are so proud of you. Thank you."
My husband and I try to keep each other up to date on "deals" we make with him so that the other knows what's going on. Sometimes, my husband will say no to something in a statement form loud enough for it to carry to where I am, knowing that my son will come to me and tell me, "daddy said yes". This helps us with a united front and consistent responses to requests. It also keeps us from arguing over who's the pushover!
You can't make it stop, but you can sometimes redirect it to something productive or make a lesson out of it. Try to remember that she does it because she's brilliant and trying to figure out boundaries to her world and social interactions. You can show her those boundaries in an age-appropriate way without embarrassment to her.
Good luck and know that every mom and dad with a 3 year old is there with you!
Cheers