If you're concerned about stopping Marketo from making updates to a field that already has a value -- whether that value was originally set in Marketo or in SFDC -- you can use the Block Updates feature in Field Management.
More complex arrangements need to be done using SFDC. Block Updates can't stop Marketo from updating fields from empty to non-empty (that is not considered an update).
Other ways to handle this, in addition to Sanford's idea of importing these data as "untrusted" and blocking field updates from untrusted imports.
1/ create validation rules or play with the profiles in SFDC to do this. Typically, what I would to is create validation rules that prevent the field updates when another field (lets call it "sales channel") is true. When you import, you set this field to true in Marketo and when the sync happens, the value is blocked. Then SFDC values will override the data in Marketo. The drawback of this method is that it will block any update to any fields, including filling in empty ones.
2/ Another way to look at it is to distinguish the leads that were created on import vs the ones that were updated. You can do this through importing in static lists and using appropriate filters (lead was created + "list is XXX" constraint). You can combine this with proxy additional fields in which you store a copy of the salesforce values for the fields you want to protect. Then, when the field is updated from import, you use some smart campaigns to restore the values from the proxy fields.