You need to set the "Marketing Suspended" field to false. I'm not 100% sure that it's available in the SOAP API. However, if it is not, you can do requestCampaign() and request a S...
Program tokens should work (98% sure), however they may not appear in the token picker: you just have to type them in.Otherwise, indeed use a Change Data Value on a Lead field.
I'm not aware of such a setting. As an alternative, you could do getMultipleLeads to get the Marketo IDs, then call syncLead and pass in the Marketo IDs instead of the email addres...