The relative color theories mentioned by everyone here are really excellent pointers and great advice at making things POP when you need them.
I am not a very accomplished spriter, I am really more of a water color/ oil painter. But I think I still might have some useful advice for picking highlights and shading.
For most general shading work, I like to create a transparent wash in a dark gray or sepia (gray brown) or dark brown... or sometimes a dark blue. When I work digitally I replicate this by futzing with the opacity level on the layer, It is usually around 30% to 40% Drop the shadow layer on top of a flat color layer and allow it to tint your colors into their shadow tones. You should pick one color for your shadows and stick with it!! Stick with it for all colors in a level. For characters I would use the dark gray for shading, it will hopefully be neutral when jumping to a level that may have a different color palette.
I do something fairly similar with highlights, I tend to pick pure white and then make it very transparent
Also:
http://studiochalkboard.evansville.edu/s-chiaro.htmlLearn it; love it; like it; good. I will have about 2-3 shadow layers that are all at about 10-15% opacity, then the parts that overlap will pick up as being the darker shadows. I find that it is really nice to keep all of my shadows modular, because they can be applied and swapped onto multiple sprites.