Is there a way to have WordPress autodetect page templates in the page-templates directory and any sub-folders?

You should be able to do this with the theme_templates filter (see the get_page_templates() function). What you need is a function that walks through the sub-directories and returns all the page templates. Then you hook it into that filter.

You could create a function based on get_post_templates(), replacing the call to get_files() with a function that scans subdirectories as well.

This approach is a bit unstable, maybe, because you’re copying core code that itself could change. Your code would be in the theme or plugin, but if the core version of get_post_templates() changed, you’d want to update your version of it as well.