How can I pass WP_Query results to a plugin?

I think for shortcodes, which are generally used in the WYSIWYG editor by non-technical users, it’s best to keep the parameters simple:

[custom-shortcode color="red" size="medium"]

In other words, shortcodes are designed to provide functionality that an end-user can place somewhere in their content, with the option of supplying a few different customizations.

For obtaining something as a complicated as WP_Query results, I would use:

global $wp_query;

That gives you access to the current query being executed at the moment that your shortcode is run. You can do that in the function that your shortcode would call.

If you need to make an entirely custom query for different data, you can in fact just create a new WP_Query:

function custom_shortcode() {
  $params = [];
  $q = new WP_Query($params);
  // ...
}

So it’s best for your plugin to go lookup or get the data versus expecting the data to be passed. That’s not always the case, but with what you presented, that seems like the best route.