The problem with initializing lazily is that the lazy binding property will be kept in memory even after onDestroyView is called. This will prevent it from being garbage collected which will then cause a memory leak.
As you pointed out, the critical part of the delegate is that it has lifecycle observers to properly null out the ViewBinding property so it doesn't leak. The other good part about the delegate solution is that it is nulled out automatically for you, so you don't have to think about it as a developer.
Let me know if that answered your question or if I can clarify it better.