Yeah that woudln't achieve what I'm looking for. that would be tagging the program (definining a property of the program), not creating a field on that program that could be uniquely defined for each contact (e.g. "program registration number"). the only workaround I see right now is available to sfdc users by creating a custom campaign field and having that field sync over to marketo.
For a value that is unique to each contact on a particular program, what you really want is a campaign member field. In a nutshell, you create that field on the lead/contact where Marketo can populate the value and then build a SFDC workflow rule that copies that value to a campaign member field when the lead/contact is added to a campaign.
I use the same lead/contact field for every program. Once the SFDC workflow passes the value to the appropriate campaign, I delete it from the lead/contact so that it can be populated again if they're added to another campaign.
My understanding of the custom object sync is that it will only allow you to read and filter on those objects, but not write to them from Marketo.