You mentioned a way to assign an event to a button within a slot, and mentioned how the event doesn't get added to slot content that is injected... Using delegated event handling, you can get around that. The basic idea is that the click event is on the shadow dom, and in the event handler we check if the button was clicked.
connectedCallback() { this.shadowRoot.addEventListener('click', (e) => { if(e.target.closest('.primary-btn')){ console.log('shadow event triggered!') } }) }