For me the biggest win with Docker is how composable it makes containers. Building new images only takes moments because of how fast containers can be downloaded, started and modified.
It's certainly possible to do all of the same things with virtual machines, but the difference is the process is really cumbersome. No one has made an equivalent service of Docker Hub for virtual machine images and snapshot deltas.
Exactly this. Also in my experience Docker wraps LXC much more nicely then raw LXC, which on my current work machine with Ubuntu 14.04 doesn't work at all (whereas I've got a great chain of Docker images set up for web dev right now which gives me a complete overview of what I'm building).
Docker doesn't wrap LXC any more; they re-implemented that stuff in libcontainer. Well, the code to call LXC is in there somewhere as a backwards-compatibility option, but you won't be using it unless you really try.
Although I haven't yet reviewed LXD, I agree that plain LXC is an absolute pita to use, at least it was in 2012 (the last time I used it in prod, aside from Docker)