I worked at CodeWeavers during the development of Proton, and one of the biggest hurdles for getting Wine (and therefore Proton) running on Haiku is the memory layout of Haiku[1] and subsequent failures of mmap(). I have a Haiku port that runs basic applications out-of-tree, but many Win32 programs crash on Haiku still.
You could just bypass the preloader completely. It exists only to work around the Linux ASLR implementation which would otherwise tend to place DSOs randomly in the address space, potentially overlapping regions that Windows keeps reserved. If Haiku doesn't implement ASLR, or lets you easily disable it, or alternatively would accept patches to ensure its address space layout is always Win32 compatible (better!) then the preloader could be disabled.
However if mmap is more significantly broken then Haiku needs work - Wine does need the ability to map things into the address space at the requested locations and actually get it.
Haiku implements ASLR but there are ways to disable it. They are undocumented private APIs, though.
mmap on a fixed address should work just fine, unless the address is outside the normal range or in an already mapped region, which seems to be a problem on 32-bit systems. I think there are some emulators we have ports of which already use MAP_FIXED quite a bit.