Accel Stepper help, stepper not going backwards
Work through your code. When it gets to the target position, your loop looks like this:

void loop()
{
    // Change direction at the limits
  stepper2.moveTo(user);
  stepper2.setSpeed(300);  
  stepper2.runSpeedToPosition();   
    stepper2.moveTo(-stepper2.currentPosition());  
    stepper2.setSpeed(300);  
    stepper2.runSpeedToPosition(); 


}


So you say, move to position 'user', then move to position '-stepper2.currentPosition'. Then as the loop comes around you again say move to position 'user', and so on.

The loop will repeat hundreds if no thousands of times per second, so you are basically telling the stepper motor to change direction thousands of times per second which will be why the motor starts vibrating when it gets to the user position.

If, just for the sake of argument, you were to move the first three lines of code in the loop() function to the setup() function, what behaviour do you think you will observe?