The shortcoming of a clean error handling via catch nodes as you described is the reason why I still use subflows a lot, where link calls would have been the better choice in most cases.
I ended up with the same workaround by checking the error property after the call. But that's a lot of boiler plate, that could be solved by proper error handling or error forwarding in the call node.
The catch node inside the called flow would still be necessary, of course, but the call node should rethrow all received errors so they can be properly caught via catch nodes.
That would be a nice enhancement indeed.