The Application Watchdog that’s built in uses a FreeRTOS thread to run independently from your application code (and the system code, if system threading is enabled).
The main advantage of this is that the timeout function to call is called from a thread, not an interrupt service routine. This allows a slightly greater choice of options of what you can call before, presumably, doing a System.reset(). It’s the set of operations you can perform from a software timer (which also run in a thread, but a different one). Also, it’s very efficient, not using any hardware timer resources and using almost no CPU when not triggered.
The stack size parameter is used because it’s a required parameter for any thread. You want it to be small to avoid using too much RAM, but it has to be big enough for the code you intend to run in your callback function, which is why it’s configurable.