Motor with hall effect sensor headaches...

yome:
Trust me, all I've done for the past two weeks trying to figure this out is read and try to get my head round these concepts. It's totally new to me, and the forum was my last point of call, but point taken.

Ok then, since I'm now at a PC and not posting from my phone, here is roughly what I mean:

const int inPin = 2; // the number of the input pin for the button switch
const int outPin1 = 10; // the number of the output1 pin
const int outPin2 = 11; // the number of the output2 pin
const int hallPin = 8; // Hall sensor pin 3rd leg on the right to Arduino 8
const int enA = 6;

const unsigned long DebounceTime = 200; // the debounce time, increase if the output flickers

byte buttonReading; // the current reading from the input pin
byte previousButtonReading = LOW; // the previous reading from the input pin
unsigned long lastButtonToggleTime = 0; // the last time the output pin was toggled
byte hallState = LOW;
bool buttonPressed;
unsigned long goingAwayStartTime;

enum MotorState { HOME, GOINGAWAY, AWAY, COMINGHOME };
MotorState currentMotorState = HOME;

void setup()
{
  pinMode(inPin, INPUT_PULLUP);
  pinMode(outPin1, OUTPUT);
  pinMode(outPin2, OUTPUT);
  pinMode(enA, OUTPUT);
  pinMode(hallPin, INPUT);
}

void loop()
{
  // Read button state
  buttonPressed = false;
  buttonReading = digitalRead(inPin);
  if (buttonReading == HIGH && previousButtonReading == LOW && millis() - lastButtonToggleTime > DebounceTime) {
    lastButtonToggleTime = millis();
    buttonPressed = true;
  }
  previousButtonReading = buttonReading;

  // Read Hall effect sensor state
  hallState = digitalRead(hallPin);

  // Do state machine actions
  switch (currentMotorState) {
    case HOME:
      if (buttonPressed) {
        currentMotorState = GOINGAWAY;
        goingAwayStartTime = millis();
        digitalWrite(outPin1, HIGH);    // Turn on motor direction 1
        digitalWrite(outPin2, LOW);     //
        analogWrite(enA, 100);          // Sets motor speed (value between 0-255)
      }
      break;
    case GOINGAWAY:
      if (millis() - goingAwayStartTime > 1000) { // Runs motor for 1 second
        currentMotorState = AWAY;
        digitalWrite(outPin1, LOW);     // Turn off motor direction 1
        digitalWrite(outPin2, LOW);
      }
      break;
    case AWAY:
      if (buttonPressed) {
        if (hallState == HIGH) { // No Magnet
          currentMotorState = COMINGHOME;
          digitalWrite(outPin1, LOW);   // Run motor direction 2
          digitalWrite(outPin2, HIGH);
          analogWrite(enA, 100);
        } else {
          // motor broken? failed sensor? possible error case
          currentMotorState = HOME; // or perhaps have a separate ERROR state where nothing happens
        }
      }
      break;
    case COMINGHOME:
      if (hallState == LOW) {
        currentMotorState = HOME;
        digitalWrite(outPin1, LOW);
        digitalWrite(outPin2, LOW);
      } else {
        // maybe add a safety timeout?
      }
      break;
  }

  // Do other stuff while the motor is doing its thing
  // but make sure that nothing blocks so long that a
  // change in the Hall effect sensor could be missed
}

Utterly untested, but you should get the idea. I would encourage you to use more descriptive names for variables etc. It will make things easier as your sketch gets larger.