Well, I realized that I get because I cannot express this in Java:
class MyClass<T> { }
interface MyInterface<T extends MyClass> {
T<S> m1(S argument);
}
However, I found a rather fancy solution to this. Instead of manually upgrading my return type in every subinterface, I use Spoon to read and write the corresponding source code before compilation. The compiler sees my code as if I overrode the return types in every interface manually. This keeps my code in sync with the super interface on every Maven build and I do not have to worry about it any more.
This solution might not be for everybody, but it is the cleanest solution I could think of in the spirit of DNRY.