First, yeah, a lot of code will be broken, including the code you just wrote that doesn't compile since the protocol requires setters on those vars.
Second, replacing the var with a finish() function will require you to start exporting a lot of logic from the model to the code around it when you want to do something as simple as a checkmark button toggle.
Finally, and as I tried to point out in the article, developing software is about making tradeoffs. It's a balancing act. There are a lot of "rules" and following some of them blindly will also lead to increased complexity in your application.
Saying that you're always going to wrap domain objects means that you're deliberately choosing to make the application more complex, that you're deliberately choosing to write more code, that you're deliberately choosing to increase compilation and build times, and that you're deliberately choosing to accept the distinct probability of introducing more bugs... all to "protect" the application from a situation which may never occur in the first place.
I'm not saying never do it. But what I am saying is that if you do so, then you're doing it with a full understanding of the consequences of your actions.