you are dealing with a built-in limitation of the campaign.
As you say, a contact can only be inserted once per campaign, meaning you have a 1:1 relationship between Contact and a specific campaign.
This cannot be solved on the Campaign Member in a scalable manner by just "adding another checkbox" for reinsertions. What if there are 10?
Also, it probably makes very little sense to open up "n" campaigns to insert a user, it will get very messy and complicated.
So it's a "systemic" problem of the objects involved. Campaigns would be nice but won't cut it, and you should solve it at a general level. So let's work on that, and create an object that works for you.
In abstract form, your requirement is:
1:n relationship from Contact to [something that triggers journeys].
My recommendation is, I would go for a custom object that does exactly that:
Make it very generic to allow for diverse reasons to create a record:
Something like "journeyTriggerEvent__c" with a field structure along those lines:
recordId,personContactId,businessContextCategory,SubCategory,Subsubcategory,source,TimestampUTC
[systemGenerated & Unique],003xxxxxxxxxxxxxxx,MySubscriptionProcess,MySubProcess,myDetail,[UserID],01042021_13:13:00
Note there is NO limitation on a PersonContact being unique here. Every record has its own unique key and you can create journeyTriggerEvents in whatever way and for whatever usecase you please. As most things involving SFSC, it won't scale without limits, but definitely a couple of usecases can share the same object. Do your own due diligence in terms of load.
To make it easy in daily life, customize the PersonContact Page layout in a form that users can create records on that object via a simple UI, and the various fields are filled in a meaningful way.
Base your journey Entry Source listener(s) on the "journeyTriggerEvent__c" object (when a record is created) and use the various categorizations to identify what usecase a specific record is about. The object can serve as a gateway for one or several journeys. Through timestamping and source logging, it can act as a log of who went where, when and "who did it". It's probably a good idea to periodically clear all records out, potentially archive them elsewhere, so as to not create indefinite growth.
Finlly, build up one or many journeys on those categorizations.
==
Yes, a limitation is, you don't have the built-in functionality of campaigns ("add to campaign" on the Contact Page Layout, campaign member tracking), but that is crying over spilled milk- the campaign works as described above and that probably won't change.
Hope that helps!