Do private properties persist between submissions on multi-step form?
Yes, do the same in D8, use $form_state. There is one caveat though. The form object and form state doesn't persist for the original form build. This was removed in the early stages of Drupal 8, because the form cache table was growing too fast. Since then forms are only cached after the first rebuild.

Normally this isn't a problem. If you store for example the form step in $form_state and it is initialized again with 1, but you have a form action triggered incrementing it to 2, your form then can use the cached $form_state to move back and forth.

This doesn't work however for data no longer available in later rebuilds. In this case use a hidden form value which will be cached together with the rendered form. Add the correct cache metadata for this value so that the rendered form can be invalidated when the value is changed.