Indeed, we have an example of self-similarity: the chunking process that helps us understand the code also helps us improve our refactoring skills. Abstractions help us chunk as we understand the design of the system. Patterns like Composed Method leading to Template Method often help us by allowing us to focus on smaller parts of the system at once, even at every level of abstraction of the system, from the entry point to the lowest-level libraries. As I've written before, many programmers think that they want less abstraction, when truly they are objection to indirection without abstraction. With strong abstraction, we hide irrelevant details and draw attention to what matters. Now I would say that this works because it helps us to chunk.
Now some new central questions emerge: How do we notice the difference between (mere) indirection and abstraction? What do we mean by "relevant" and "irrelevant" details? How do we behave when our judgments about relevance change?