Plugins before event subscribers
The solution to the the problem is to dynamically add event subscribers later in the page load process, so for example: 

  /**
   * {@inheritdoc}
   *
   * We can't return the plugin-based events here, but we set up
   * a response to do that at a later stage
   *
   */
  static function getSubscribedEvents() {
    // Subscribe to kernel request very early.
    $events[KernelEvents::REQUEST][] = ['onRequest', 900];

    return $events;
  }

  /**
   * Add the plugin events at this stage - early in the process.
   *
   * @param GetResponseEvent $event
   */
  public function onRequest(GetResponseEvent $event) {
    // Find every event mentioned in a plugin...
    foreach ($this-&gt;notifierManager-&gt;getNotifierEventNames() as $eventName =&gt; $plugin_id) {
      // Add the event to the dispatcher as a listener, to call that routine...
      $this-&gt;dispatcher-&gt;addListener($eventName, [$this, 'onNotification']);
    }
  }


The list of event names is cached in getNotifierEventnames().