Because when you teach a student the "hello world" program under windows, and you want to make sure the shell doesn't close so they can see the window, what are you going do to?
1 - Tell them to use write system("Pause");
2 - Tell them to use the windows.h header, to get a handle to the current terminal, and send the pause message via the handle?

The thing about programs that use system("Pause") is that 99% of the time, they are toy programs anyways, and while portability is always good, most of them are scrapped at the end of the day. What's more, it is the easiest way of pausing the console, and in programming just like business, time is money. system("pause") is a business decision: "Do I want to spend 5 minutes coding something I'll call once?". Besides, when issuing a pause command, the human operator is the only bottleneck when you think about it. The cost to call system(pause) is irrelevant.

Of course, there is a time and place for everything. I think the system("pause") command is one of those things that people tell you "you shouldn't do that because it is bad", when in reality, it should be more like "You should be aware of what you are doing, and THEN make an educated choice of whether you want to pay that price".

I write toy programs everyday, and they all feature system("pause").