I'm not sure what kind of answer you're looking for; but Forth always has at least two stacks, the data stack and the return stack. The return stack can hold temporary data too, but not operate on it there; and the data stack can hold basically anything that fits in its cells, whether integer data, signed or unsigned, addresses, indexes, sometimes floating-point numbers, use two or more cells for multiple-precision numbers, etc.. Sometimes floating-point, if implemented, is given its own stack. You could easily implement other stacks, like for complex numbers, strings, etc.. I find the absence of typing to be a great benefit. Like Chuck Moore (the inventor of Forth) said, "If I want to take "a" and add 1 to it to get "b", it's none of the compiler's business to tell me I can't!" And I don't get errors from the fact that it does not have and enforcing typing.
I've never worked with an MMU; but if the application thinks that everything in it starts at a given address every time, even though the MMU puts it at another address, I don't expect any problems.
I have a 6502 treatise on stacks (plural, not just the page-1 hardware stack), with 19 chapters plus appendices, at
http://wilsonminesco.com/stacks/ . The programming is mainly assembly language, but some of it is to do it in a way similar to how it's done in Forth, using a zero-page data stack. There are also chapters on using the page-1 hardware stack for temporary variables and for passing parameters, and for recursion, like some other languages use internally.
Growing the stack
down has an advantage is that if the top of the stack is the lowest address, then indexing with 101,X gives the top stack byte, 102,X gives the second, 103,X gives the third, etc..