If you're doing modern OpenGL, which you probably should be, shaders it is. You don't have to do it by blending, you could calculate the final pixel colour in the shader. I'm not sure which way would perform better, you'll have to benchmark that. Depending on how your game works, you might even be able to do the calculation in the vertex shader and let the GPU interpolate, though I'm not sure since I've never done it, but I like to think about it.
It'd simply be a matter of uploading a texture like this to the GPU:
Then either, use the shader to blend the tile and lightmap together, and output the final colour, or render the lightmap (using a simple passthrough shader) after you've rendered the tiles as their default colour and enable blending (you'll have to find the right blending function). Each tile only needs to correspond to one pixel in the lightmap.
All approaches should be sufficiently fast even on low spec computers, it's up to you on how you want to balance performance/development complexity. My guess is passing alpha values once to the GPU and using those will be fastest, but there is a reason we do benchmarks and testing.