I am not sure how you are using try and catch blocks. Try and catch blocks are created with the purpose of catching exceptions which you anticipate may happen for reasons such as user error. You don't really 'need' them in every automation, you generally only need them in specific areas. If there are parts of your solution which are prone to specific errors, or you are interacting with say an emulation software via text adapter that is prone to benign exceptions I can see wrapping your code in try and catch blocks, but generally I wouldn't say you need them in every automation.
As for using a label which sends a proper message with a Boolean result to an exit point, I do not think that would work as consistently, as some exceptions may interrupt or break automation design and I do not believe it will protect you to the extent that a try catch will.