A language like Kotlin can do some of these things using delegates, interfaces and extension methods.
For example a MutableList<T> can be dropped down to a List<T> which is not mutable. And a generic conversion from Collection<T> to NonEmptyCollection<T> should be trivial to write as an extension method.