Vertex programs alone won't help you much. If you don't want to use fragment-shaders (which is advisable given the current hardware support is limited to GeforceFX/Radeon 9500+, etc), you can calculate the light-dir in a vertex shader as primary-color and then use tex_env_dot3-extension to calculate a dot3 against a bump-map.
This is only the basic idea but it should get you started. You might want to renormalize the light-dir in a normal-map since the linear interpolation between vertices will otherwise dim your light a little bit, etc.
Of course, this only gives you diffuse color (no speculars) but you should get the idea.
When I did something similar for a terrain-rendering-engine, what helped me a lot was to write down the lighting-math first and then try to figure out how you can map that to whatever hardware you have (register-combiners, ATI_fragment_shader, texEnv-dot3, etc).
Feel free to mail me if you have questions (
jeNO@SPAMframesys.de)
Jan