Very cool insight,

But, the unsubscribe at unMount callback could be something that the framework could provide, like a Observable lifecycle.

So you have

let unmount$ = lyfecycle.filter ( l => l.type === Stage.UNMOUNT);

And the button events and the stop could takeUntil this lifecycle happen.

The framework can publish this lyfecycle Observable as a multicast with refCount, so no need to unsubscribe either.