Leer de teclado de membrana

Según pone en la página de la librería, getKey solo devuelve el valor cuando se pulsa, no cuando se mantiene, para eso debes utilizar getState().

void loop()
{
  key = ' ';
  key = myKeypad.getKey();
  if(myKeypad.getState()!=IDLE) {
    switch (key) {
      case '1':
        digitalWrite(led1, HIGH);
        break;
      case '4':
        digitalWrite(led2, HIGH);
        break;
      case '7':
        digitalWrite(led3, HIGH);
        break;
      default:
        digitalWrite(led1, LOW);
        digitalWrite(led2, LOW);
        digitalWrite(led3, LOW);
    }
  }
  else
  {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
  }
}