Is there a get_post(s) filter that can alter/replace the output completely?

If you look towards the end of the query process (which starts with the pre_get_posts filter), there is a filter called the_posts (not to be confused with the_post). This allows you to modify the output of get_posts completely, as you asked.

Beware that this only works if there is no plugin or so that suppresses filters on get_posts. Also note that this doesn’t work on get_post.