Nice post, as always. It's interesting that you describe this process, because I often go through pretty much the same thing. I pound out a messy but useful script in a couple of minutes. Then I go through and clean it up. Then I clean it up at a higher level. Next thing I know, the main code is a loop or two and a bunch of subroutine calls.
I approach the module part of it differently, though. Usually I stop at the "modulino" stage, satisfied that I have a clean script that does something useful. I never make it into a module "just because." About the only time I make the transition, is when I think, "boy, I wrote a script to do XXX two weeks ago, and now that I'm doing YYY, most of what I did then would be really useful." Basically, I create modules only when I actually want them for code reuse. That way, I don't spend the time to make a module proper, unless there's actually a need for it (whether my "needs" are really worth the time is a whole 'nother topic).