Stepper motor, do new commands override old ones before they are complete?

J-M-L:
Have you read what I wrote above? If you use the built in library the loop does not operate much faster than the stepper because the step call will wait for the stepper to complete its step before going back to the loop...

I meant physically. The loop is very quick, the stepper is physically slow.

I trimmed down my code a LOT to get rid of the useless parts, I hope I didn't butcher it too much.
Here is what I'm using.

#include <Stepper.h>

const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 9, 8, 7, 6);
int flowin = analogRead(A2)
             int tempin = analogRead(A1);
int tempH2O = 0;
int flow = 0;
int const movesteps = 1;
int steps;
int TargetFLOW;

void setup()
{
  Serial.begin(115200);
  myStepper.setSpeed(200);
  myStepper.step(360);
  steps = 360;
}

void FLOWcontrol() {
  if (flow > (TargetFLOW + 50) && steps > 6)
  {
    myStepper.step(-movesteps);
    steps = (steps - movesteps);
  }
  if (flow < (TargetFLOW - 50) && steps < 360)
  {
    myStepper.step(movesteps);
    steps = (steps + movesteps);
  }
  Serial.print(steps);
  Serial.print(",");
  Serial.print(flow);
  Serial.print(",");
  Serial.print(TargetFLOW);
  Serial.print(",");
  Serial.println(tempH2O);
}

void loop()
{
  tempin = analogRead(A1);
  flowin = analogRead(A2);
  tempH2O = map(tempin, 0, 1023, 0, 200);
  flow = map(flowin, 0, 1023, 0, 1300);
  TargetFLOW = map(tempH2O, 0, 200, 1100, 700);
  FLOWcontrol();
}

The problem is that it keeps removing steps even though flow has started to fall. By the time I hit target, it has removed enough steps to overshoot the target. It then stops, and start working on the opposite direction. I've tried using delay(), but it also delays the reading of the flow, and I can't under any circumstance flow down the inputs.

Here is an image attached of the plotter. You can see the steps in blue go up/down.
The green is the target flow and red is the measured flow.