However, this will not change the fact that s is dropped at the end of the function. You can't store a reference to a function-local variable in a container passed from outside of the function, it would dangle the moment that the function returns.
Ah yes, I just saw the commented-out DefaultStorage type in your snippet. String::push_str doesn't store the reference for later access, but clones the underlying bytes to an owned location instead, avoiding any use-after-frees.
...represent borrow durations at least just longer than the function body. As such, you can never borrow a local for that duration, because all locals move or drop by the time the function body ends -- which is incompatible with being borrowed.
So you can't borrow s for 'a with the original signature.
HRTBs are how we write bounds that can work with borrows of locals (borrows shorter than the function body).