Waitstaff are essentially your slaves. The guy at McDonald's, he deals with you for maybe a minute, but every little damn thing a customer wants is a waiter's responsibility...sometimes for hours on end. More water? Let me run over to the other side of the restaurant and bring that over to you so you're not inconvenienced by having to stand up. Oh, you're having a bad day? Well, feel free to act like a prick to me; it's my job to sit there and smile at you, followed by extensive ass-kissing. Made a mistake in ordering, and now you want something else? Sure, let me get rid of this and I'll bring your new choice right out. Oh, you're going to act like it was my fault? Go right ahead! Food taking too long? Well, even though we're at peak capacity and that's technically the kitchen's deal, I'll go ahead and take your abuse on the matter.
The tip system provides incentive for waitstaff to put up with this BS. It keeps us smiling at you when you're acting like a jerk. (Low blood sugar, for the record, is no excuse for treating strangers poorly, especially when they're there to do things for you.) Yes, I'd keep tipping; most customer service jobs aren't nearly as intensive when it comes to making sure the patron is not only happy, but freaking ecstatic. Additionally, there isn't a lot of room for advancement in restaurants. The only way to that raise you probably deserve for working your ass off is to get better tips by providing better service. And when you're bent over backwards for someone and they stiff you, well, suck it up, thems the breaks.
Can you tell I've been waitstaff for damn near a decade?
EDIT: That said, I'm seeing some horror stories here about shit service received, to which my reply is: Tip low. Don't stiff- they may assume you forgot. A quarter or nickel tells them you were displeased, and hopefully they'll get the message and try to do better in the future. It swings both ways, only tip if they did their damn job right, don't feel obligated to tip rude or incompetent servers. And with THAT said, try not to blame the server for the food- that's the kitchen, and while waiters can affect the quality (by leaving food sitting too long before delivery, for example), it's usually the kitchen.