I didn't mean to disagree with your post, just to point out a subtle distinction that is often overlooked (which can lead to confusion) between elision and inference. I agree that if you find you are using named lifetimes, it does indicate that you may be doing something a bit more complex, though I wouldn't go so far as to call it odd or a code smell. For example, a signature like this:
fn foo<'b>(&self, foo: &'b Bar) -> &'b Baz
doesn't set off any alarm bells for me, it just indicates that the return value is going to be some value borrowed from foo
.