What is the problem with ISRs running in a user stack? The ISR runs, exits, the stack is cut back, and net effect on the user's stack is zero.
The Burroughs B6000/7000 (later Unisys A Series and now ClearPath MCP) systems did that, and it works fine. An interrupt acts like a hardware-induced procedure call. The user's state is pushed onto the stack, a new stack frame is started, and the interrupt routine runs in that, calling other OS procedures as necessary to do its job. If execution of the user task needs to be suspended, say to wait for an I/O, the OS moves the processor to another stack (there's a privileged instruction to do this). Once control returns to the original stack, the OS procedures eventually exit back into the interrupt routine, which exits back into the user's stack frame, with the hardware restoring the prior stack frame's state at each step. There are perhaps two significant differences with this architecture, though, that help to make this work. First, there are no user-accessible registers. All registers are dedicated to specific purposes, which is what allows the hardware to save and restore state automatically. Second, the stack on these machines is not part of the user's address space, it IS the user's address space. All push-down expression evaluation and call history is in the stack and is managed automatically by the hardware. All addressing is relative to the stack. Scalars are typically allocated in the stack. Arrays and other larger structures are allocated in separate segments elsewhere in memory and accessed through descriptor words in the stack. Procedure parameters are contained in the callee's stack frame and effectively become local variables for that environment. The instructions do not have memory addresses, not even virtual addresses. All addressing is in terms of offsets from the base of a stack frame or from the base memory address in a descriptor word. So the stack is not an afterthought made feasible by auto-incrementing a register. It's a central tenet of the architecture.