Update variable while running if statement

int rawStickX = analogRead(A0);
int rawStickY = analogRead(A5);

The initial values are useless, as you have no idea what will happen when the compiler generates the code to initialize those variables. It obviously can not call the functions to see what they will return. Even if the function were called when the Arduino was booted, the hardware is not ready, so you will get garbage.

int sticky = map(rawStickY, 100, 900, 0, 2400);

Mapping garbage will NOT do anything useful.

  pinMode(rawStickX, INPUT);
  pinMode(rawStickY, INPUT);

Setting the pin mode on an analog pin will NOT do what you think it will. Don't do that.

    return pulses; //make pulses global

pulses is already global, as is copyCount. They are different types, so assigning copyCount to pulses doesn't make sense. Nor does returning a global variable. Nor does the comment.

Returning a value from a void function doesn't make sense, either.

It is as we suspected. Once you start moving the actuator, you do not read the joystick(s), so moving the joystick while the actuator is moving will do no good. When the actuator stops, the the joystick is read, and the actuator lurches off to a new position.

You need to ditch all the do/while loops. Read the joystick. Move the actuator a little ways towards the joystick position, and read again, as quickly as possible. Or, start the actuator moving at some speed that is proportional to the discrepancy between the desired position and the actual position. Adjust the speed as the joystick moves the desired position.