IIRC SPARC register windows do something like this - a call and a return do not need to save or restore anything but a pointer to what is the first register available to your function.
I think it's at least partially a problem of not being better enough than "good enough". Not to mention Itanium (and maybe Sparc, I don't know enough about it to say) had plenty of its own problems, including with interrupt handling.