There are several ways I can think of, all of them doable in Unity luckily enough. First of all, as far as I know, the whole 2 pixel light thing in Unity doesn’t mean you can only have two lights in your scene or two lights on screen at a time, it means only a maximum of two lights will affect a single object. You could have lots of lights in your scene, it’s just that individual objects wouldn’t be affected by more than two (or whatever you set your limit to). A lot of the time, this isn’t even all that noticeable. In Unity, lights can also be set to switch from vertex to pixel automatically depending on how many lights are affecting an object.
As to Mech Assault, I don’t think I’ve played it before but here are some of the more common ways. One is by using vertex lighting, which is quite performance friendly and a lot of older games used that. But the main way is using lightmaps, bake out the lighting for the environment and all static objects…and then have the dynamic lights (which you used to bake the lightmapping) ONLY affect dynamic objects that move around. So instead of the dynamic lights affecting the whole environment, it’s only a handful of moving objects. Lights from things like projectiles have a small range so they can be set to affect everything. This way, you could have lots of lights on screen at a time, but if each one is only affecting a couple of objects at a time, the performance hit isn’t too bad. The fact that the environments and objects themselves aren’t too detailed also helps.
For further performance, you could limit the number of lights on screen at a time, or you could also set it so that if a light is too far away, it turns off. Since the world is using lightmapping, when the lights get turned off from being too far away, the only objects that would be affected would be dynamic ones, the environment would remain lit. Or maybe instead of turning the lights off, switch them to vertex mode. Or do a combination.
So for example, lets say at range 20, all pixel lights switch to vertex lighting, and at range 40 they get turned off entirely.
Another shortcut too is to use fog to hide lit/unlit objects that are far away. Which is great for performance anyways, lots of games from that time used fog to hide the fact that they had low draw distances, allowing for better performance.
If you’re feeling really stingy, one trick to fake lighting is to create objects with self-illumination or additive shaders and have them not cast any actual light at all. This way you can have really bright laser blasts and explosions and magic attacks and stuff like that which look bright, but don’t actually cast light. A lot of the time if the player notices at all, they won’t care all that much since they’re busy looking at the big shiny effect, and if they do notice…well you’re working with limited hardware, the rest of the actual game probably isn’t that much more detailed.
And one last thing, in the case of Unity, you have a massive advantage that the older games didn’t. And that is the lightprobes. Using lightprobes in Unity you can eliminate almost all lights entirely and dynamic objects will basically be lit by the lightmapping. That’s how Shadowgun on iOS was done and I believe they managed to not use a single actual light in the game or something crazy like that, while at the same time having characters and stuff lit by the environment.