I totally agree with your top three:
• nullability,
• sealed classes,
• and immutability (well, at least it feels like it, technically you could have a getter returning changing values, but close enough for unnecessary mutable variables to feel dirty)
Lateinit is really only solving a problem that Java with it's mutable variables and always nullable types doesn't even have 😂
only two big things that come to my mind:
• extension methods and
• inline functions with reified type parameter!
(I'm Kotlin/JVM-only for now.)