I think I've got a better idea now. So openbsd has ASLR which affects data, code/library, and stack positions. Then this solution works on top of it by reordering symbols within the code.
One thing I'm still not sure about is whether the kernel could theoretically do the same reordering at load time using relocatable symbols.