There is and XML-RPC interface that gets access to all of Webmin (including Virtualmin). It is extremely low on documentation, and you pretty much have to read up on the Perl functions (which are slowly but surely being converted to POD so the API docs can be put up on the web rather than in the ghetto of only being visible in the module library).
So, it is accessible via PHP or Python (or anything else that can speak XML). It’s not nearly as easy to use as the command line and remote HTTP API that ships with Virtualmin. It’s much lower level, as the Webmin module libraries are usually quite low level–it access things at the same level as module code doe, so you can import the bind8-lib.pl via XML-RPC, but you can’t usefully do anything with the higher level functions within the module. That’s probably not a very clear description if you’ve never done any Webmin programming…Webmin has its own module system (invented before Perl got objects and such). A module is a combination of a modulename-lib.pl file, which contains a handful of parsers and writers and such for the configuration files of the service, and a bunch of cgi files that server the UI and call the low-level functions to “do stuff”.
More programmer-friendly interfaces are something we’ve been working on for a while. Jamie just merged the Virtualmin Pro command line and remote tools down to GPL yesterday, so those will be converged going forward–should lead to more usage and more documentation.