Well the first answer is, just about anything!!! Remember that AC's can have a single placement point (they don't need multiples) meaning that the family will behave very similar to placing any non-hosted family. I'll let Krista follow-up with a post on this brilliant work-flow, including my suggestion on how to "circumnavigate" the issue of limited category options for AC's.
On to the main subject of this post....
Since time eternal (or at least as long as I can remember) Revit has had a 1D array (ie, define a start point an end point and elements are arrayed between them). However in architecture there are certainly a number of occasions where a 2D array would be far more useful (ie create a "grid" of elements rather then a single row). Now this little technique will not solve all problems, but it may help with some, and inspire others.

Enter adaptive components. The first step is to create an AC with a flat plain, that is actually a "void" (thus not visible as a piece of geometry). Each corner (however many you want) is of course an Adaptive Point. Once we have the Void Surface, we can divide it (clever tick huh?) so now we have a grid that we can control with parameters. Did I mention that we can also put the AC into the Furniture Category (kinda useful).

Once you have your furniture panel, you can load it into your array family. Place the panel (of course you have multiple panels, and allow users to use a Type Parameter to switch one from another) into the divided surface, and now we have a 2D array of chairs. Once that is done, load the array family into your project and start placing.
As with just about anything that uses Adaptive Components, more CPU power is going to be your friend. Regen times can be high with Adaptive Components, though as long as the nested family is not too complex, you should not see anything to far out of the ballpark here.