I think you touched on the easiest solution which is tying together the pump/master into one station. From there you only need to differentiate between pump 1 vs 2.
You could hook up your zones to the OS as follows:
1 – Pump 1 + Master 1
2 – Pump 2 + Master 2
3 – Zone 1
4 – Zone 2
5 – Zone 3
6 – Zone 4
Programs based on your example:
Program 1 – Station 1 and 3
Program 2 – Station 1 and 4
Program 3 – Station 2 and 5
Program 4 – Station 2 and 6
You would then put the controller in concurrent mode. You also want to make sure the time window for each program does NOT overlap, the duration is less than the time window, and the interval is much greater than the time window.
In the above setup the master valve is not set using the OpenSprinkler (since it can only handle one master).
Each program would only handle one zone and the pump/master would have to be selected in each program.
I hope I understand your problem correctly and maybe this helps. If I am off base let me know and I will rethink this problem.