Im still new at shaders, but as for using VecSunDir, I think it may be possible.
I dont know about the programming side of it, but from a concept point of view,
couldnt you process VecSunDir first, and then process all the VecLight's next.
But only process the VecLight if(VecLightPos[x]!=VecSunPos).
That way the sun will only be processed once, whether it is in the VecLight list or not.
I have no idea on the efficiency of this concept though.