The short answer -- make the z-size = s. It's not that huge of a hit -- the local arrays are 6*NX*NY*ndofs instead of 5*NX*NY*ndofs.
Otherwise, I'll try to implement the special-special case of DMDA_BOUNDARY_PERIODIC, P=1, zl=1, and s > 1 soon.