Generally speaking, it is safe to change anything that is not currently "in use" but that is not as straightforward as "active/inactive."
First, in this context the only major difference between manual/progressive changes and overwriting with an imported copy is that all the changes occur at once. Changes to a Forms business process will always affect active instances so you do have to be careful.
A lot of this is going to be case-by-case and highly dependent on the nature of the changes, how your steps depend on one another, etc., but there are some general things that can help you decide what you need to do to keep things running smoothly.
That being said, no it is not safe to assume that changes to a step will not cause a problem simply because that particular step is not active in any instance; whether or not it will cause a problem is much more about what specifically you are changing.
As you mentioned in your example, removing a step that is connected to an active task would cause a problem just like if you tried to demolish an overpass while someone was driving on it.
On the other hand,
If you reorder the processes, like adding a new step or diverting things to an entirely different step, it's more like closing the onramp; that alone won't affect the current traffic.
If you change the steps that follow, then you would need to preserve the outflow of the replaced step so it could continue along despite the changes; like leaving the offramp open and/or redirecting it until you get everyone off of the highway.
Depending on the changes, one or both of those concepts may apply.
If you have a step that is no longer active, like if you made the two changes above then waited to clear out all the traffic, then you would be in a safe position for removal.
Basically, you don't have to pause or break active instances to make a change, but depending on the nature of the changes you might need to treat it more like a transition and set up temporary detours and/or delay removal until you can safely wrap everything up.
You also have to be mindful of the bigger picture. Say for example, you remove Step 2 because it's no longer necessary. If there are no instances actively waiting for Step 2, that might be perfectly fine. However, if Step 3 depends on a value that is only collected in Step 2, then you could create a problem for yourself like ripping out a wall before checking if it is load bearing.
The same concept applies to other things as well, like adding/removing fields and variables, changing whether fields are required, etc.
The key difference with fields/variables, is that they are the most likely to affect an entire instance, but the general solution is the same, i.e., making changes in the right order to ensure anything new gets added to all new instances but making sure it isn't required for older instances, and removing dependencies before you remove any field/value.
The important thing to note with field/value changes is that anything you remove will be removed from everything including the history on old instances, and anything you add will be added to everything, but it won't have a value in any instances that are past the point of the process at which the value is set.
Long story short, it's always going to seem a little murky because it really depends on how your process works and the nature of the change; the key is to think about the process as a whole, always evaluate changes in that context, and make the changes incremental when necessary.