I don't know if someone has already mentioned this, but one of the reasons long methods is bad is because they usually involve several different levels of abstraction. You have loop variables and all kinds of things happening. Consider the fictitious function:
function nextSlide() {
var content = getNextSlideContent();
hideCurrentSlide();
var newSlide = createSlide(content);
setNextSlide(newSlide);
showNextSlide();
}
If you were doing all the animation, calculation, data access etc in that function it would have been a mess. The nextSlide() function keeps a consistent abstraction layer (the slide state system) and ignores others. This makes code readable.
If you have to constantly step into smaller methods to see what they do then the exercise of dividing up the function has failed. Just because the code you are reading is not doing obvious things in child methods doesn't mean child methods are a bad idea, just that it was done incorrectly.
When I create methods I usually end up dividing them up into smaller methods as a sort of divide and conquer strategy. A method like
if (hasMoreRecords()) { ... }
is certainly more readable than
if (file.isOpen() && i < recordLimit && currentRecord != null) { ... }
Right?
I agree about absolute statements are bad and also agree that usually a long method is bad.