The admin section has a really nice ajax handler admin-ajax.php. I know that the handler can be used for front-end ajax calls as well. The problem is that when a "back-end" interface is used to handle a "front-end" ajax request it effectively sand boxes that request from the rest of the front end site. a plugin using the admin-ajax.php ajax handler won't intergrate very well into other front end plugins.
You use admin-ajax.php to handle an ajax request. the request sends back a post to be loaded asynchronously into the page. This post has custom shortcodes for a different unexpected plugin that _only_ runs on the front-end. Instead of integrating nicely into said unexpected plugin you only output ugly shortcode syntax. The shortcode never gets registered because admin-ajax is considered a back-end operation.
This is only one example but I think that you get the point that using the admin-ajax handler has unexpected drawbacks. WordPress needs a front-end ajax handler.