Create an extra attribute: Draft.
Remove all validation from events. Don't use build in validation because only one validation at a time is triggered.
Button 'Save as draft' can skip validation. Put all validations in a validation microflow.
When 'save and finalize' is clicked call this validation microflow (be sure to set 'Abort on validation errors' for this button). Set draft false. Commit.
Create a scheduled task to clean up old drafts. Older than 24 hour for example.
I assume you have validation in the entity and the form? Because then when you do a refresh (no commit, but only a refresh) on the form ALL the fields that are not validated will have the red required message. Not just the first.
So with a custom save button, do the validation check there and when failing refresh the screen without the commit. Then ALL the fields on the form that have the required set to true will show the required message.