Replace wp_query with wp_user_query

Is there a way for me to use the theme page.php (or single.php) template, intercepting the query to replace it with a wp_user_query or does this have to be a custom template job?

No, WP pages are either post archives or singular posts, based on a WP_Query. You can create virtual pages based on rewrite rules with parameters and load templates but then either the template is responsible for loading the content, or a normal WP_Query happens using custom parameters from the rewrite rules.

You cannot however swap the post query for a term query or a user query, etc, they are not interchangeable and don’t have a common base. Even if the template itself was fine you would run into issues with any plugin that attempted to type hint, and would need to modify significant parts of WordPress plugins and the theme. At an absolute minimum you would need wrappers around WP_User_Query and WP_User to mock the interface of WP_Query and WP_Post, and any code that attempted to use a post ID would just be flat out broken in weird and wonderful ways.

It’s much easier to create a custom template and use WP_User_Query directly. If you’re looking for a general solution that’s portable across themes, none exists. The closest you can get is including your own template in a plugin then trying to load the header.php and footer.php and hoping that’s all that’s necessary for that theme ( ignoring block themes and site templates ).

and even pushing query vars in via my template_include function ($wp_query->post_type=”blah”) but to no avail as the query always eventually falls back to those default ten posts.

By the time template_include runs it’s too late, the main query has already been processed, decided, and the database consulted. Template loading is the very last step and happens after posts are retrieved.