You could of course use memory protection to protect the stack, but that probably would only need slight changes to your program, not necessarily to MiNT: just put the stack into a malloc’d region and make sure you don’t own adjacent memory below.
Yes, this could work too but it's more complex and fragments memory.
Isn’t that what mintlib does anyway if you fiddle with _stksize (or whatever it’s named)? I don’t remember.