Creating effective and interesting non player characters can be a difficult challenge for some people. Here are a few tips and tricks that I've learned over the years.
Remember that what drives your player's characters also drives your NPCs. The prime motivators for people are wealth, power, and other people.
--npcs want to be rich too. If the party hears about a dungeon with rooms full of treasure, chances are that there are others who have heard this as well. This could set the scene for a rival adventuring party becoming a major protagonist for the long term.
--power. If it's not money, it's power. Power can come in many ways, depending on your setting. Perhaps it's simply being wealthy and visible with your wealth. That's a fleeting sort of power though, and one that you have to work hard at to keep. There are other kinds of power too. There's power of position--maybe an npc wants the party to help her gain a position of power in an organization and promises favors and friendship. Maybe the party stopped someone from getting the position of power they wanted, and have earned that person's emnity. There's also the power of knowledge, specifically the knowledge of secrets.
--people. NPCs have relationships with other NPCs (shocking isn't it?). My very first post explained a great way for generating a depth of relationships for your NPCs. Now it's time to use those relationships to your advantage. Hatred, love, envy, jealousy, respect, fear, etc. are emotions that everybody feels, whether they're a member of the party or not. Having a protagonist being driven by an emotion instead of a pursuit of wealth or power can be a very effective way of disarming your players and leaving them vulnerable.
Affecting the people that an NPC cares about can be a great way to develop depth in them as well. Threaten a family member and you've got an NPC who's motivated and hard to resist.
Some other motivations for NPCs. A simple misunderstanding between a member of the party and an NPC that might result in lots of conflict. Another method that I really like to use is having antagonists who aren't evil in any way, but who have goals that are opposite of the party.
--Very few people in the world are truly evil straight through. Almost every person likes to think that their actions are justified. Use this to help add depth to your NPC's actions.
--Just like one dimensional player characters are boring so are one dimensional villains.
--duped or enslaved minions can make great contacts for the party.
--As a personal preference when describing NPCs I try to avoid getting too detailed. I try to focus one one thing that will make them memorable, because the players most likely won't remember any of the rest anyway. Whether it's a distinct physical feature (nose broken in a fight and never healed properly), a physical quirk (he shifts his eyes nervously when talking to authority figures), etc. I find that this sort of description is easiest on me as a GM, and generally more effective in helping players remember characters.
Finally, remember that NPCs aren't stuck in time and activated only when the party comes by. They have their own plans and goals and desires. Things happen in the town, plans proceed, people get older, etc. This will probably be worth a post on it's own but it's something to remember about creating NPCs. Figure out what it is that they want and then have them work towards that. Doing so will help provide natural plot elements for your game.