I believe that since an activity or fragment subcomponent scope life is bounded to the instance of said activity or fragment, perhaps we should question the correctness of providing the view models via those components. They are, by design, intended to outlive the scope of a single activity or fragment instance if needed which exceeds the scope of the component providing them.
Due to this shoehorning of scopes it might introduce the possibility of memory leaks. If the view model were to in some way hold a reference to the component that initially injected it, it would then become a leak source of the activity or fragment which it was intended to outlive.
Perhaps a more correct approach would be a top level finite state machine that would become a domain model aware implementation of a ViewModelStore which could then be used. State persistance and restoration as well as runtime specific data (intent/bundle args) at that point could become an issue that might make constructor injection impossible and require late init type functionality.
At that point, if alternative approaches were considered I believe it would be best to remove the usage of arch components view model and potentially even dagger-android for a custom mechanism. Major drawbacks being: increased learning overhead when adding new team members, as well as a high probability of less test coverage, increased boilerplate for handling injection in android (at least until minsdk=28 or dagger-hilt?).
The approach shown in this gist does a decent job of pushing all the necessary configuration and dependency delivery into dagger which is its intended goal, the down sides being the issue of the scope shoehorning which is the key driver of the complexity in injecting view models that are not owned by a dagger component directly.