Run lazy-builders of sub-keys in the render array Our page and region templates need to access fields from the custom blocks inside that region.

Unfortunately, {{ region.block_id.field_x }} doesn't work, because region.block_id only contains a #lazy_builder, and therefore the actual variables inside that render array aren't available until we're in the block template itself (at which point it's not possible to inject variables back into the parent template).

Basically, it looks like what we need is a theme_preprocess(&amp;$variables) that iterates over all child elements and recursively evaluates their lazy builders / pre-render hooks, so that all nested elements are available to parent templates. Is there an easy way to do this, or are we stuck with re-implementing parts of the render API here?
This seems like an anti-pattern. Normally you would configure and theme separate instances of the block for the fields you want to display in each region. 

If you need block fields in the page template, get the fields directly from the custom block content and put them in variables in page preprocess, see Programmatically accessing block content, or use the module Twig Tweak:

{{ drupal_field('field_example', 'block_content', 1) }}