Java by default also tries to keep running if something unexpected happens. If an exception is not caught and goes all the way up the stack, that thread will just print out a stack trace to stderr and then quietly stop running. Do you know how many zombie daemons I have had to debug/fix because something slightly unexpected happened on a critical thread. I personally added in a generic uncaught exception handler to all of the Hadoop daemons years ago because it was happening all of the time in the early days of YARN. Storm is almost 100% immune to those situations, and has been since the beginning.
That is not to say that storm is not stable. On most of our clusters the only time nimbus or a supervisor goes down is when we upgrade it. We have had daemons running for months. And if they do go down they typically recover in a few seconds, and my team gets an alert so we can debug what happened. Running storm (and I would argue any critical daemon) under supervision for production environments is just a best practice.
For debugging/testing something then go ahead and use nohup.