From a practical sense, ActivityPub may be the obvious choice as it gives easier interop with the largest federated platforms.
But what else? There are existing platforms built on these protocols, such as movim for xmpp, and another for matrix I forget.
From a technical standpoint, are there any major pros and cons?
And… that if “activitypub just works” , so does XMPP.
And… XMPP servers offer better performance and taking less resources than any of the leading AP projects.
And… XMPP already has E2EE.
And what do you do about other clients? What happens when the user wants to clear messages on the server when they’re fetched, but doesn’t want to do that for the social network rooms? What about moderation.
XMPP is good at a very specific thing and I don’t think its users would like all the necesary changes.
None of your questions are about the protocol, but implementation details of the application.