You have missed a key point in your fact list.
It is true that the EEMEM macro can cause a variable to be placed in EEPROM
#define EEMEM __attribute__((section(".eeprom")))
But the section
attribute is only for global variables, not local ones like those used in recursive functions. So, no, there is no stack in the EEPROM. The stack is always in SRAM.
Since EEPROM is only for global variables, it is known at compile time how much is used. If you also force a memory location, that will not cause a problem. The compiler will make sure the addresses it chooses for the other global variables will not be in conflict.