И TCP и UDP - оба два - это протоколы передачи данных. Использование одного протокола не исключает использование другого. Каждому протоколу свои задачи.
TCP дает гарантию того, что данные будут загружены, так как требует подтверждения их получения. Если данные не были получены, то они запрашиваются снова и снова. На стороне кода уже регулируется количество попыток получения и, если не получилось с какого-то раза, то соединение разрывается и консоль заливается кровью в консоль пишутся сообщения об ошибках, приложение аварийно завершается или еще как-то явно обрабатывается произошедшая ошибка. Не сложно догадаться, что TCP используется там, где важна достоверность информации, например установка игрой связи с серверами Steam. Или логин игрока на сервер. Лежит Steam - лежит мультиплеерная часть игры. Потеряли пакеты входа игрока на сервер - выдали на весь экран Failed to Establish P2P Connection with server. Игра использует этот протокол, она не может его не использовать.
UDP не требует подтверждения и допускает потерю данных. То есть в рамках протокола потеря данных считается не просто допустимой, но и вовсе нормой. За счет жертвования проверками доставки данных достигается значительное увеличение скорости их передачи. И, чем больший путь эти данные преодолевают, тем a) больший прирост скорости достигается; б) тем сильнее процент потери этих данных. Чаще всего этот протокол используется там, где потеря данных ни на что не влияет - например в стриминговых сервисах. При передаче потока видео потеря части пакетов может никак не повлиять на видимое качество видео, так как свежие данные закрывают недостачу старых. Иногда видно фризы, когда процент потерь уж слишком большой и показывать просто не чего. Но это опять же не проблема вселенского масштаба, как только возобновится качество соединения, видео снова начнет показываться.