I don’t have a direct answer to your first question, but I have an indirect answer:
If you are at the point where you need to ask that question, then you need to review your strategy to see what could be placed in subroutines.
Under 7.0, I have created a data-driven strategy with 200+ objects (many of which handle subroutine calls and the pre- and post- processing of those calls), and have not run into any issues. This strategy is used by 90%+ of the teams in the environment.
I would also recommend utilizing subroutines just to help keep the maintenance managable - once you get that large in one file, it gets difficult to visually step through the call flow.
If your environment uses multiple strategies, you might want to examine them to determine what processes are common between them, and move those into subroutines.