They used two completely different approaches to Lamp Control. Bally and Stern used individual SCR driver devices, one for each lamp. SCR's are interesting in that they are like a switch that once it's turned on, stays on until power is removed. When I first encountered these, I wondered, "How do they turn them off without removing power?". Well, after looking into it, I realized that's why they used a unfiltered DC supply for the controlled lamps. When the SCR is on, they lamp turns on. When they turn off the SCR, the lamp turns off on the next zero crossing of the unfiltered DC.
Williams used a Lamp Matrix approach. Similar to the way the Switch Matrix works, they strobe an individual row in continuous succession (row1, row2, rwo3, ... back to row1, row2, row3...) and anywhere a lamp should be on, they turn on the respective column at the appropriate time. This causes a bit more flicker in older Williams lamps. Ever notice on older williams how there is a little bit of a hum in the audio when a lot of the lamps turn on? The flicker was reduced in the Williams though because even though they used a matrix approach, the switching speed was fast enough that the lamps were being refreshed faster than the lamp element would die out (updates before the element cools off). This is fine for incandecent lamps, but LED's work a lot different. Off is off and On is on with no cool down or warm up time.
You would think that the Bally method is a better way, but actually Williams was able to create much better Lamp effects and controlled sequences with their approach. That's mainly due to the software in their control program. Theirs was much more advanced (and was actually similar in some ways to modern Object Oriented Programming). They treated each device in the machine as an individual software object that had control elements (on time, flash rate, etc...).
I'm not sure how the newer machines differ. I haven't worked with many new games.
G