The theft issue is a big one. I tend to play thief/sniper characters, and that means I do tend to carry away whatever isn't nailed down. The only game I've seen which even tried to tackle the "selling the shopkeeper his own stuff" thing was Morrowind. And Oblivion had a simplified version where you just couldn't sell stolen stuff to anyone other than a fence, which I also liked.
I've yet to find a way of discouraging theft that has satisfied me. This is because I'm hard to satisfy, because I want what I have in real life: a moral imperative not to steal.
Worst system is "you steal stuff and people right next to it don't even notice".
Next worst: "you steal stuff and everyone in the area knows about it telepathically, and attacks you".
The bottom of the reasonable ones is: "you steal stuff, and might get attacked if caught."
With a little more depth, that can become almost good: "you might get caught, which could result in the guards being called, or the observer attacking you, or fleeing, or just having a reaction penalty or bonus, depending who they are and what you took". It's not morality, but at least it's a measure of depth.
For morality itself, all I've seen has been morality-scoring systems Ultima 6's virtues system, and Fallout's karma. You get a score change when you do an immoral thing. But that's not satisfying, emotionally... it's just a number, a "you clicked on a red thing and your karma score went down, better donate a bit of metal to the church to fix that". Can't relate to it on an emotional level.
What I'd love to see is, as you point out,
consequences. Moral repercussions. If you steal the Helm of Tharg from under the nose of the watchman, you should meet that watchman in the stocks later on. Stuff like that would need case-by-case, item-by-item scripting, though, so really can only be realistically done for quest items.
But if you rob someone blind, they should be affected by their poverty the next time you see them. That would need to be done programmatically, rather than on a case by case basis.
So, say you robbed everything that was not nailed down from a house. All the silverware, food, candlesticks, etc.
When you return there a day later, any of several things could happen. The obvious ones are: it's all respawned; or it's all still gone. Most games are a little smarter, and respawn only the cosmetic items, after a certain amount of time.
But me, I'd want to see that my theft has affected them, and to do that, I'd respawn according to a table. Everything stolen would have a chance of being respawned, but as one or more steps down-table in the value scale, depending on how much was stolen from the area, how many times. A silver platter could be replaced by a fine china one, or a tin dish, depending. The severity of the change would be determined by a "family debt"
At very severe levels, the furnishings (the nailed down stuff you couldn't steal) could also be replaced, to represent stuff getting sold; security in the building would be stepped up (lock qualities would rise, unlocked doors would become locked, guard patrols would become more common, guard and NPC alertness and chance to spot theft would rise), and the NPC clothing could change. At this level, conversation tree items would need to open up to discuss their worry and poverty, but these could be generic, since everyone worried about destitution through repeated burglaries would have much the same things to say.
For best moral results, there should be children in the household, and the quality of the food in the pantry should drop even if the food has not been stolen.
Upside: a moral dimension to theft. Downside: still shallow