generate multiple custom blocks from a single api call
What I would really like to be able to do is keep my existing block
  class (in whatever form) and pass that same single API call to 3
  seperate templates that can be placed as three separate blocks. How do
  I do this?


This is possible. Add a configuration option to the block class in blockForm() and then use this option in build() to change the content and template. Then place the block three times and choose for each instance a different option. To avoid calling the remote API three times in one request use drupal_static().


  Alternatively, is is there some way to generate the API call through a
  function in the .theme file in my theme (abandoning my custom module
  completely) and then just pass the variables directly to the page
  rather than going through the block system?


This is no problem. You can put three variables in mytheme_preprocess_page() and use them directly in page.html.twig. 

Think about caching. You can cache the remote API call with \Drupal::cache('data')-&gt;set() with a certain expire time. In a block this is not necessary, you can set a cache max-age and as long the block stays in the cache the remote API is not called.