Can we have private drafts?

I would probably create a custom field / check box for this for a draft stage. Then hook into post status transition (or around) and when post is published force it to only private, even if normal publish was pressed.

From personal experience custom post statuses are a wreck. They seem like a good idea, but they just introduce mountain more of access and visibility problems since core code never cared much for any non–default status.