How to modify archive query with pre_get_posts to append CPTs?

You seems to assume that it would grab archive for first of multiple post types. But why? Order in this case does not indicate any kind of priority.

WP seems to consider that logical as well. If you take a look at get_archive_template() the individual template will only be considered if there is only one post type in query.

Multiple post types in query will cause archive.php to load, as you are observing.

If you want to load more specific template, you would need to override that via filters as well, for example with archive_template one (dynamic one in get_query_template()).