Failed to save enabled features : Virtualmin is configured to setup DNS zones, but this system is not setup to use itself as a DNS server. Either add 127.0.0.1 to the list of DNS servers, or turn off the BIND feature on the module config page.
Do exactly what it says to do. 
This is so that Webmin can display pages on virtual servers whose DNS zones have not yet propagated to the Internet at large yet (the page editor also relies on this, among other things).
To do that, browse to Webmin:Networking:Network Configuration:Hostname and DNS Client.
In the DNS servers list, add 127.0.0.1 as the first entry (and move the others down).
Save it.
My question is, what is the main function of bind dns?
BIND is a name server. It maps names, like virtualmin.com, to addresses like 70.86.4.238.
If you want Virtualmin to manage your DNS entries, then you must enable BIND DNS. If you want to manage your DNS elsewhere, manually, then you don’t need it. I recommend letting Virtualmin handle it if you have more than one or two domains. Managing name service and getting all of the records right (including SPF, NS, MX, etc.) can be time-consuming work, even if you use a service that makes it relatively easy.
And do I need it in order to setup multiple domains on my server?
I’m not sure how to answer this without adding to your confusion. The two are orthogonal, but you need name service happening somewhere for name-based virtual hosting to work.
So, the answer is no…but you’ve gotta get name service from somewhere for ANYTHING to work on your system, so you might as well let Virtualmin do the heavy lifting for you. The only time I would suggest otherwise would be if you are on a system of limited resources (say, less than 256MB) and you’d like to use those resources just for providing fast web service. Mail is the biggest resource hog and the first thing that should be outsourced if going that route…but DNS also requires a few MB and some CPU to operate.