How do I include a Javascript Library from a Twig Extension in Drupal 8?
Partial Answer that works

... but I don't like it because the list of paths in the config never gets reset.  I think I need to figure out how to do Cache Contexts for a proper answer.

In my modules/custom/MY_MODULE/src/TwigExtension.php file:

class TwigExtension extends \Twig_Extension 
{
   const CONFIG_KEY_NAME = 'MY_CONFIG_NAME';
...
    public function MY_MODULEWidget($MY_VARIABLE)
    {
        /* @var $config Drupal\Core\Config\Config */
        $config = $this-&gt;configFactory-&gt;getEditable($this-&gt;getName() . '.settings');

        $paths = (array)$config-&gt;get(self::CONFIG_KEY_NAME);

        /* @var $currentPath string */
        $currentPath = \Drupal::service('path.current')-&gt;getPath();        // returns '/node/47446' not the alias

        if (in_array($currentPath, $paths)) {
            // Good
        } else {
            // Add $currentPath to config
            $paths[] = $currentPath;
            $config-&gt;set(self::CONFIG_KEY_NAME, $paths)-&gt;save();
        }

        return array(
                '#type' =&gt; 'inline_template',
                '#template' =&gt; '&lt;div class="MY_CLASS" data-MY_DATA="{{ MY_VARIABLE }}"&gt;Loading Widget ...&lt;/div&gt;',
                '#context' =&gt; array(
                    'MY_VARIABLE' =&gt; $MY_VARIABLE,
                    ),
                );
    }
}


The above code will add the current path to a config.  Unknown if there's an upper limit to the size of the data in the config; however, in my implementation the number of pages that this is on will be small (&lt; 100).  

Then once the path is added to the module's config setting then we read it to conditionally add a library like this using hook_page_bottom() like this in my modules/custom/MY_MODULE/MY_MODULE.module file:

/**
 * Implements hook_page_bottom
 */
function MY_MODULE_page_bottom(array &amp;$page_bottom)
{
    /* @var $paths array of strings */
    $paths = (array)\Drupal::config('MY_MODULE.settings')-&gt;get(Drupal\MY_MODULE\TwigExtension::CONFIG_KEY_NAME);

    /* @var $currentPath string */
    $currentPath = \Drupal::service('path.current')-&gt;getPath();     // like '/node/47446', not the Alias

    if (in_array($currentPath, $paths)) {
        // Include the library that will modify jQuery(".MY_CLASS")
       $page_bottom['MY_MODULE']['#attached']['library'][] = 'MY_MODULE/my-twig-extension';
    }     

}


EDIT 0

Added a hook_build() to my module like this so I could clear the setting manually:

function MY_MODULE_rebuild()
{
    /* @var $config Drupal\Core\Config\Config */
    $config = \Drupal::service('config.factory')-&gt;getEditable('MY_MODULE.settings');

    $config-&gt;clear(Drupal\MY_MODULE\TwigExtension::CONFIG_KEY_NAME);

    $config-&gt;save();

}


Note: $config support fluid interface (e.g. $config->clear(...). 

I will still not accept my answer because I still believe I should be using Cache Context for this.