I typically just generate the error @ each stored proc level.
If you want to bubble the error message to the 'top' ... how about adding a varchar(XXX) output variable/parameter to each of your procs? Then pass your error details up through the output variable/parameter.