Why not some solution like Go: use cheap exceptions (with ErrorCode) for things like out of memory that are seldom handled usefully but use return codes for errors that should be handled by the programmer (network error, HTTP error status, ...)
The problem lies that it's the standard library that decides which kind of error goes where and for bare metal developers, every exception is important whereas for fast prototyping some would want not to handle any error at all.