There are a number of options for doing this. I was looking into it and found that webform handles saving it's required fields on draft by setting the #validated flag to TRUE on all of its fields before submission so that they won't run through most of _form_validate so that the required fields don't throw an error. Then, it has it's own form validation that runs.

In my attempts to do the same thing, the field_api fields on this module were dying on submission. Anyway, that's one possible way of handling this problem, but it needs more investigation.