One of Ardour's unique features is its use of an external routing system (JACK) to handle all signal routing within the program. This is incredibly flexible because it allows anything to be connected to anything else in completely arbitrary ways. However, in sessions involving the use of many sends, the resulting visible connection situation in JACK can get rather complex, and its easy to become confused about what is connected to what.
Two new features in Ardour 3.0 help to improve this situation: explicit aux busses, and internal aux sends.
Explicit Aux Busses
Ardour has historically not tried to precisely emulate hardware mixers, in an effort to avoid some of the routing limitations that those systems come with. As a result, you only had a choice in Ardour 2.X between a track and a bus, with no clear way to create corresponding more exactly to a traditional auxiliary bus (commonly called an "aux bus" or even just an "aux"). In Ardour 3.0, when you go to create a new bus, you now have a choice between creating a regular Ardour bus, and an aux bus. The latter is pre-configured to be useful with the new internal sends.
A "regular" or "direct" Ardour bus can still be used with traditional sends, but it requires the extra step of setting up an explicit return point, and every time you connect a JACK-level send to it, you will need to setup the routing too. This leaves "direct" busses as something best used to bring external audio into a session, rather than as a replacement or obvious alternative for an aux.
Internal Sends
Ardour 3.0 now features internal (non-JACK) sends for use when connecting tracks (or busses) to aux busses. Because aux busses are now explicitly identified, Ardour also offers the list of them clearly when you are creating a send. You can now have many busses and many sends without cluttering up the connection state you see when using JACK patch managers like QJackctl or Patchage.
There are also major improvements in controlling sends, both internal and JACK-level.