you can just create the singleton piece and use a structure block to copy them, a bit tedious but better than changing how vanilla generates structures.
For your problem of absolute height, a dirty solution could be to have multiple structures generate but with different Y levels each and then associate the correct pattern to each.
Instead of having say MyStructure generate between x and y, have MyStructure_50 generate at y = 50, then figure out the max/min length your piece can be and voila.
its going to be a bit less random for sure (and more tedious), but your structure does sound a bit weird.
Not sure how complex your structure is, but if this is too much you could look into making a normal structure, without any jigsaws.