The first box in the device toolbar is the “audio host system”. On Linux this is usually ALSA, though there could be options for OSS and/or Jack Audio System if they are installed and running (usually only ALSA).
The recording and playback “devices” depend on what devices the host system says are available. Just because the host system says that an input or output is available does not mean that it is actually available. On my laptop, ALSA says that I have several surround sound outputs, because the sound chip has several surround sound outputs, but the surround sound outputs are not physically connected to anything - only “front left” and “front right” are actually wired up.
“Dmix” is an ALSA plug-in that is intended to allow multiple applications to share the sound card. This “should” work, though on a standard Ubuntu setup it is rarely used because Ubuntu uses PulseAudio by default. I don’t know how reliable this is because hardly anyone uses it on Ubuntu.
Pulse (PulseAudio) is a “sound server” that sits on top of ALSA. ALSA provides the low level drivers, and PulseAudio provides a range of services, including allowing multiple applications to access the sound card simultaneously, “loopback” recording, network audio streaming, on the fly resampling, and much more. For simple media players, PulseAudio (these days) usually “just works” and requires little attention (this was not always the case). However, PulseAudio is a very powerful and versatile sound server, and for more advanced audio applications (such as Audacity or Ardour) it can require a bit of configuration to get it working properly.
There is one problem with using PulseAudio with Audacity, which is that on some systems, rapid starting / stopping of playback can cause Audacity to freeze. This is due to the way that Audacity connects to the sound system, which in turn is due to historical reasons. Not everyone gets this problem, but it is extremely annoying if you do.
Why doesn’t Pulse work on your machine? What happens when you try it?
The problem is not in the Audacity code. Audacity does play short selections (as can be seen by the meter), but sound systems have and control their own buffers. As far as I’m aware, Audacity does “the right thing”, and then delegates playing the audio data to the sound system.