Ну, я хз, какие были первые принтеры и насколько им были реально необходимы эти символы, но в любом случае это голая калька в действий машинистки, которая вручную прокручивала барабан для новой строки и сдвигала каретку в левое крайнее положение.
А различать вывод надо, и некоторые терминалы это делают. Пример с \r выше есть, а вот с \n надо старые терминалы потыкать.
Юзкейс того, где это нужно:
1) Про \r: реализация прогресс бара в консоли. Тут всё очевидно. Но при выводе в файл всё будет выведено кучей строк. Не очень, но приемлемо.
2) Про \n: Вывод иерархической структуры. Выводишь имя директории, делаешь только \n, и сразу печатаешь имя файла из этой директории. Директория закончилась - делаешь \r\n. И не надо считать длину выведенного имени, всё крайне просто. Однако при выводе в файл такой структуры не будет.
Крч, я считаю, что это всё на сегодняшний день выглядит несколько кривовато. Ну, то есть, все юзкейсы, которые я описал, вполне решаются другими способами сегодня, и работают не хуже, а то и лучше, но вот именно поэтому это всё не нужно. Имхо, нужен всего один символ "новая строка", а для реализации "123\r45" = "453" надо просто брать кусок буфера вывода терминала/файла и орудовать с ними.