From what I've read on the internet along time, rebuilding from scratch is not something exceptionnal or rare.
A lot of developers tend to say by the end of their game that they rewrote it at least twice along the development process (from the prototype to the finish product), and it proves especialy true in my experience when, as you've mentionned, you learn new tricks and "good ways" along time.
You find yourself thinking about the game and the code of the game in the new light of the new knowledge/experience you have.
Arima's focus on refactoring is a way to cope with already a lot of written code when going back from scratch is hard on the moral/motivation level and that some of this code works as an engine or is good/stable/strong enough to be reused.
On the other hand, in C2, I've noticed that actualy the less code you have often means the better it is coded.
It might be the same in every code languages, but I only experienced it in C2.