Before GATs stabilization HRBTs were something you use very rarely and usually it wasn't a big problem. GATs are implicitly HRBTs which means this problem becomes more important. But it's so very well-known that it's even explicitly mentioned as a problem in the very blog post which declared GATs stable!
Basically as was said before: This is a bug. And one that is fixable in an almost certainly backwards-compatible manner. But it’s also tough to fix. So it’s not something we want to block stabilization on.
I kind of understand why it was done that way: even with this limitation GATs are very useful. But yeah, that's something literally everyone who tries to use lifetime GATs hit pretty quickly.
That linked blog post goes into detail about the exact kinds of bounds Rust currently lacks the ability to express. Your case is a little bit different, but if we apply the syntax from that post you might get something like
impl<T, S> Foo for T
where
T: Deref<Target = S>,
S: Foo,
for<'a where Self::Bar<'a>:> S: 'a,
{
type Bar<'a> = S::Bar<'a> where Self: 'a;
}
Here for<'a where Self::Bar<'a>:> S: 'a, would translate roughly as "S must be valid for any lifetime 'a which is used with the associated type Self::Bar<'a>".
This use case might be sufficiently different from the motivating examples in that blog post that it would require a different feature in the compiler though. I'm not very familiar with the inner workings of HRTBs.