This is a great question.
The one option you didn’t list to consider - which may or may not work depending on how you work with your clients - is to have separate Pulumi organizations for each client, and have yourself as a member of each org, and the individual clients in their corresponding orgs. That probably provides the cleanest isolation, most control and feature set. It’s relatively easy to work across multiple organizations in the Pulumi Console (I work across 3 orgs every day).
If that option doesn’t work - then either of your other options are certainly possible. We’ve seen many teams use a mode like this for allowing clients (whether internal or external) to have independent copies of some infrastructure - frequently deployed across different accounts.
The answer likely ultimately depends most on how you want to arrange access to these stacks for your clients.