This usually can be arranged. This argument here needs more work. I think in some cases it's safer, in some cases less. Education and better tools should increase the number of cases for which it's practical. The hard part is, you have to understand the space very well to find that decomposition.
Factoring reduces a system to the direct product of independent parts.
Abstraction focuses on one part, ignoring the others. Encapsulation enforces an abstraction barrier. The essence of program design is finding the right abstractions. Any given language won't always let you express the right abstractions directly. For one particular program.