На самом деле существует переполнение, но C не сообщает вам.
Переполнение оставляет значение, которое оказывается равным -4000, когда интерпретируется как целое число со знаком. Это работает как задумано на 2-х дополнительных машинах.
Попробуйте интерпретировать результат как беззнаковый, и вы заметите, что (u1-u2) оценивает какое-то, казалось бы, не связанное число, когда u1