Every problem can be solved by adding another layer of abstraction. That is why VIPER is a popular choice; it has a lot of layers/entities to spread out all the work. Writing an app in VIPER is not hard. What is hard, is to write an MVC app which has the same virtues with a smaller amount of boilerplate to support.
Since I am a lazy person, I always aim only to write code which is necessary and essential. I want to write code which is good enough to fulfil both the product requirements and the code quality standards we have in our team, but a minimum of the code to support the infrastructure or boilerplate of an architectural pattern. Thus, I believe that instead of fighting UIKit, we have to embrace it and make use of it as much as we can.