Storing pre-translations in VCS is easy, but it requires translations status changes in order for humans to post-review pre-translations. Here’s a possible implementation:
We replace the Fuzzy status with a new status "under" the Translated level (say "Fuzzy.Next"). Strings in this status end up in VCS, but still "need some work", which is true for both, the current Fuzzy status and the pre-translated strings.
So finally, we'll have Missing < Unreviewed < Fuzzy.Next < Translated as the available translation statuses. Humans will only be able to make Unreviewed or Translated submissions, while machines will only make Fuzzy.Next submissions.
Of course, humans will be able to approve Fuzzy.Next, which will make them Translated.
Note: we'll also need to run checks on pre-translations once we start storing them as "Fuzzy.Next".