Hey Mike, I would consider mapping product purchases to fields on the Account object which would give you visibility on the Marketo side.
You would create custom Account fields, checkboxes for example, that could be as simple as, "Has Product A", "Has Product B", "Has Product C".
When a customer has a closed/won opportunity with products, you have some automation that will change those relevant product checkboxes on that customer's account to be true. The exact method would take some experimentation -- I know a Workflow Rule wouldn't do it, but you can do some much fancier cross-object updates with Process Builder, so that could be your answer. Worst case scenario, you could do it in Apex.
You may need additional logic if there are contracts with periods and you wan't the checkboxes to revert to "false" once the contract expires, etc.
Then in Marketo you just filter on those checkboxes...you will select all contacts belonging to the account using this method, since the contacts inherit the account values.
Let me know if this works or if you solve it another way -- I'm curious to hear how you do it.