Не проверяются пароли, в чем проблема?
$password = crypt($_POST['password'], $salt);
Не изобретайте велосипед и откройте для себя эти функции: password_hash, password_verify 
И как уже подсказали выше, нужно проверять длину не хеша пароля, а исходного пароля (у хэша длина в любом случае будет больше 6 символов и проверку он автоматом пройдёт, даже при пустом пароле)
Слишком много ветвлений и они слишком сложные. Сделайте класс, функции, и внутри каждой:if(strlen($password) < 6){
  $_SESSION['error'] = 'Password must be at least 6 characters';
  return false;
}
if(strlen($username) < 4){
  $_SESSION['error'] = 'Username must not be less than 4 characters';
  return false;
}
И т.д. для каждого условия своя проверка без else, а если все проверки прошло и нигде не вышло - значит всё ок.