It occurs to me that the secret to making more interesting NPCs might not lie in making them more like people, but more like players.
Think about it. Real people are very boring, especially strangers. Even in a tabletop RPG, most of the random people a player accosts don't have anything interesting to say. The same thing is definitely true in reality.
The interesting characters in an RPG are the ones with a role to play. It's not that they have goals or a complex relationship schema, it's just that the GM wants them to hang around and do what they do.
All of the interesting characters - PC or NPC - are constantly in a subtle jockeying metagame. The characters "themselves" are "unaware" of it, if you can use those terms in relationship to a fictional fragment of personality. Anchrax the Archvillain doesn't understand that he's around to make life miserable for the players and then lose. He "thinks" he's trying to take over the world with his army of evil. But the GM still positions him to make life miserable and then lose: Anchrax's personality is a vague guide, but does not actually govern his overall activity.
I've been using quotes for a reason. A character never really thinks on his or her own. A character is powered by a person, a person who is trying to put them in specific situations so they can do what they do best.
Anchrax is not trying to conquer the world, and the princess is not trying to escape. They are playing those parts while jockeying to be where the players need them to be, when they are needed to be there, and who they are needed to be. An interesting character is only partially interesting due to their personality: it is as much a result of the situations that the GM puts them in.
Isn't that what we should be trying to simulate?