Stopping Viola Jones Face Detection early
Viola-Jones works in stages.  Only areas of the image that have a high enough "maybe" score get passed to the next stages.  If you implement your own Viola-Jones detector, then you should be able to stop between each stage and apply color/lighting corrections before going on to the next stage.

As an alternative to implementing your own, you might take a look at the openCV implementation.  You might be able to modify it for your needs.

The source is here for the cascade detector, which is the openCV Viola-Jones implementation.  You will need to examine the area after the comment //---------------------------------------- Classifier Cascade

That is where the actual detector is implemented.  I think the interesting places are operator and ocl_detectMultiScaleNoGrouping, and I really think operator is where you would need to start.