Just 4 years, 213 days, 18 hours and 31 minutes after I submitted my feature request, there's finally been a patch committed to Drupal Core (D8) which supports content moderation in the API! Yay!
See Support revisions in different states for all the juicy details. Entities now have an
isDefaultRevision() method. If you save a new revision of a node and don't set it to be the default revision, then the content will be saved in the node_revisions table, but the base node table won't be touched. This provides Core support for saving new drafts while leaving an older revision published. THIS IS AWESOME!!! And long overdue.
There's a new issue—Provide a better UX for creating & editing draft revisions—to discuss the UI for this feature. I also created an issue—Support arbitrary workflow states—to continue discussing workflow support in Core. Please get involved in these discussions and let the fun continue!