In essence it's letting you store the options you'd pass to "docker run" in a configuration file as a collection of services. You can then start your whole application using one command instead of starting the individual containers and linking them up.
Services can also be controlled as if they were whole units – you can say "start my database" instead of "start this image with these ports, these volumes, etc".
I've been trying to learn Docker and one of the things that has tripped me up is figuring out how to connect the different pieces and the mechanics of a deployment. Like, I need some process to reliably set up the DB container, create a user account on the DB, import some SQL... and then run the Web container, link it to the DB container, feed it the DB credentials, and so on.
I'm not sure fig totally solves this, but I'm pretty sure it's in the ballpark.
Services can also be controlled as if they were whole units – you can say "start my database" instead of "start this image with these ports, these volumes, etc".