Затем, что так удобнее
int x = 5;
std::string y = "test";
std::cout << x << y;
Это удобнее, чем добавлять int к строке и затем эту строку выводить какой-то функцией.
Хотя, по сути, могли бы просто функцию с variadic arguments сделать, как в других языках... Ну, видимо, по тем временам, когда создавался C++, были какие-то основания так не делать.
Одно из них - функция должна носить какое-то имя, и какое имя ни придумай, все равно это может вносить путаницу, когда кто-то захочет сделать нечто другое с таким же именем. А C++ очень универсальный язык, там могут что угодно хотеть сделать.