There are two issues here. There is the fact that he stole, and there is the his aggressive accusation about you not working.
As other posters have already said, they are actually two separate things and you need to treat them as such.
To be honest, nicking a bit of ribbon strikes me as nothing more than him just seeing if he could do it and pushing boundries which is very normal.
The fact that you've found out about it is encouraging. It wouldn't have been that hard to hide - on some level perhaps he wanted you to find out and tell him off - restablishing the safe boundries of childhood after he has dipped a toe into the scary world of adolescence.
Either way, your instict in dealing with it - punishment, making him return it to the shop - is sound, and you not be questioning your judgement on that. He has stolen and that is wrong. There are no mitigating circumstances, so do not allow yourself to be dragged into him trying to make you think that there are as a way of avoiding punishment.
With regard to the "you never buy me anything good" rant, I think it's worth remembering that eleven really is very little still. A child, even if he behaving like an agressive teenager.
Fairness and justice (at least when it comes to themselves) are so important to children.
Their perception that some of their peers have so much more than they do strikes them as monsterously unfair and wrong. The reasons for this are to some extent immaterial to them - it's just not fair and that's that.
I'm sure he really appreciates how much you have been around and intellectually he knows that this is better than a mother he sees less but buys him lots of things.
However, it's hard for children to balance that knowledge and understanding with their still very immature ability to have strategies for coping with coveting things that they can't have.
Like many of us, when we're backed into a corner with logic, children often take refuge in belligerence. It doesn't mean that they believe what they're saying. Sometimes admitting that you're wrong is very hard and so the only option open to you is to attack. Even if it means saying things you don't mean, to wound and to save face.
It is only the very rare child who will make it through adolescence without having at least a few instances of behaving in an appallingly selfish and unpleasant way. It doesn't make him a terrible badly brought-up child, nor does it make you an awful mother.
Give him an out. Don't become embroiled in a long on-going debate with him about what is and isn't reasonable for him to have, and how selfish and rude he's being and how important it is that he has a mother who is around for him and so on.
If you let it go, I think it's likely that he won't want to doggedly keep on with it either (particularly if he knows he is being unfair). It's worth remembering also that he knows how upset you are and that it's his fault. To an eleven year old, upsetting your mum is the worst thing in the world. He's probably terrified that you'll never forgive him that you really dislike him now and he doesn't know how to mend it.
Make him take the ribbon back. Decide the punishment (no TV for a week etc) and administer it.Then tell him that it's been a very disappointing episode but you hope that he's learned some lessons from it. Then let it go.
What's the point in picking at the wound and demanding sackcloth and ashes from him? What will it achieve? It's far better that he is able to walk away from the mess he's made (both the stealing and upsetting you) with some grace, knowing that it's over now and that you've drawn a line under in and given him a fresh slate.
It's been a horrid experience for you, but try to remember that this was not a concerted and deliberate attack on you. He's a child and he's made a mistake (two mistakes in fact - the theft and the attack on you). Be hopeful that he has started to learn a difficult and important life lesson and be proud that you have steered him through it.