In Scala's type system that can be expresses as well - it's called type variance. I believe C#4.0 might be getting this.
interface NOption<out T> { ... }
such that NOption<Mysub> is a subtype of NOption<Mysuper>. Still messy to read, though, and C# has ?-types anyway.