But err... at least as far as assembly is concerned, I guess it wouldn't be too hard to modify the loader of, say, PMODE/W and set up a non-flat system, maybe extend it to set up multiple segments as defined in the LE/LX header.
EDIT: So I've done some reading in "Linkers & Loaders" by John. R. Levine, and did some testing armed with wdump, tdump and uhex.
My conclusion is that the final part of your statement should be: "there is no known linker that emits multi-segment output", given that more than one DOS exe-format actually support 32-bit segments. At least LE/LX ([1][2]) and PE ([3]). Outside the MS-World, ELF also has sections and segments and in fact, any readelf -a on any executable will tell you they really are there, abundantly.
On top of that, my suspicion is confirmed that the problem is also the loader (read under
"Predefined Sections" and
"Executable code section, .text", ref. [3]).
Or more simply put: linkers and/or loaders do the fixup in software instead of postponing it until execution when the x86 segment hardware could take over.
However, I'm sure that both of these obstacles can be dealt with.
We only need a linker that does NOT fuse segments but emit segment definitions for LE/LX or PE, and have a new loader that does NOT fuse segments but creates new selectors as needed.
Returning to the topic starter: usually, at least some segments ARE defined in the EXE format, even in a flat memory model (for the purpose of setting page attributes). This seems specifically true for stack segments (albeit optional for ELF).
If your execution model supports multiple segments, then it should be possible to create a separate stack segment (well, that rules out long mode of course).
References: