A Handful of Code
The balance that I have chosen to strike is 5 lines of code in my file. I will allow myself five lines of code that could otherwise be in an external file before I actually create one. This is an arbitrary guideline, but it helps me to have a built in rule to decide when to move code to an external file.
This applies to controller logic as well. I don't ever have queries in my .cfm files, but I do sometimes interact with model components. This is really controller behavior, but so long as I have fewer than five lines of it, I leave it in the file. If I have more than that, then I create a page controller.
I think this sort of guideline leads to code that is much easier to manage than a guideline that always insists on an external file (or one that never uses one).
This does not, however, justify breaking encapsulation for any number of lines.
I have been using this rule for about a year now and I have been really happy with it.
I don't think I would exactly call that an encapsulation issue though, perhaps more of an issue of separation of concerns.
The only reason I mentioned encapsulation is that I don't think the "Handful of code" rule should be used to justify breaking encapsulation. For example, I don't think it should be used to justify using shared-scope variables in a model component.