One of the problems is that pinging takes too much time. When you publish a post, you probably wait 30 seconds or more, while WordPress is pinging your selected services.
Now, imagine a visitor coming to your blog, and it just so happens that it's the first visitor after your future post is supposed to be published. So, WordPress shows the new post. If using WP-Cron or any other similar tool, do you really want the visitor to have to wait 30 seconds, while the pinging is happening? If the visitor is impatient, he or she could actually abort your pinging! (And probably won't stick around to actually read your post...)
There is a plugin that somehow makes this ping delay disappear, but I never investigated that. Maybe it could be used here, but still you are putting your visitors in a position where they unknowingly can make sure your future posts aren't pinged!
The only solution I can think of is to use the actual UNIX cron tool, to fire a plugin every hour or so, checking if it should ping the services. Such a plugin would be very easy to implement, but much harder to configure and use. Not nearly as userfriendly as WordPress. I'm not going to do this, as I have moved on to another blog tool, but I'm sure someone will.
Oh, and this is not a WordPress-specific problem. It will occur with every single blog tool on the planet, unless it uses cron jobs already.