I use both Z offset and Z step per pass often. The only way I know to get the behavior you expect is to use multiple layers. The cleanest (IMO) way to accomplish that is to use sub-layers. Optimization won’t get you there, but can help fine tune behavior in conjunction with the sub-layers.
Here is a simple job I ran today. 5 shapes on one layer. Z offset, plus 2 pass, plus Z step per pass. I use a “base” or “park” z value and adjust height from there depending on burn requirement. My “base” height is perfect focus for the finest line engraving, but is approx 3.5mm too high for effective cutting, so engraving requires no offset value but any cuts do require an offset. My “first pass” cutting offsets are saved in the material library, so no extra thought or work is involved except for the sublayer modification. I “clone” then change the offset value.
Using a single layer, regardless of optimization settings or grouping, the five shapes are each effectively treated as a single job. Laser moves to shape 1, drops to offset height, makes 1 pass, drops by z step, makes second pass, then raises back up to start height. It then moves to the second shape and repeats, then the third, etc. For this job, that means 15 Z changes.
If you add a sub-layer (2 layers total, 1 pass per layer), it will complete the parent layer before moving to sub1. So, move to shape 1, z offset, 1 pass, move to shape 2, 1 pass, move to shape 3, etc. Once it completes all 5 shapes, it then executes the next sub-layer. ON MY MACHINE, to achieve Z Steps using this technique, I OMIT any value in the Z Step option. Instead, I add the desired drop distance to the Z Offset. So, if the initial offset was 3.5mm and I was a 2mm step, the sublayer needs a 5.5mm offset value.
The next hitch is that, depending on optimization settings, the final shape of the parent layer becomes the initial shape of the sub1 layer. This means that particular shape gets cut twice with no pause or cool-down other the time it takes for the z move. This may or may not be a problem depending on circumstances. To work around this, you need to get you optimization settings right. There’s a lot there and I won’t pretend to know the impact of every possible variation, but I know what has worked for me.
Parent Layer
Sub1 Layer
Optimization Settings

Using the setting above, this job has 5 z moves (instead of 15): z offset 1, pass 1 on circles, z offset 2, pass 2 on circles, raise to offset 1, pass 1 on outline, z offset 2, pass 2 on outline, raise to “base” height, move to finish position.
This ordering can be changed with optimization if you desire to have all 5 shapes run 1 pass, then step down and run the second pass on all 5 shapes, but it creates a fair bit of extra X/Y motion.
“Cut in direction order” seems to be the key to eliminating the back-to-back cutting of the one shape where the layer change occurs. Rather than doing that one back-to-back, it completes the shape then moves back to the (in this case) “bottom” and starts again.
You’ll probably have to try several variations to get the behavior you want. And it may well need adjusting on a per-job basis if you have specific needs.