The technique you are calling "extension methods" is known as "monkey-patching" in Python and Ruby.
With respect to a fine language, Kotlin, it doesn't have the user-base of either Python or Ruby. Python does not allow monkey-patching builtin classes, but Ruby does:
A cautionary tale. So what does Kotlin do to prevent that sort of thing?
Can you use a regular function that takes a list as argument, instead of monkey-patching the list class to add a method?
The beauty of a function is that every module is independent, so they can add their own list extensions (as functions) without stomping over each other. Whereas if they add them directly on to the list class itself, they can clash.
As for code readability, I don't think that this:
is particularly more readable than:
Not everything has to be wrapped in a class.