Is there a way to modify how often villages are generated, or is it hardcoded in the server?
Yes, this is already settable in the world.ini file, by using the [Generator].VillageGridSize parameter. Basically it says how far apart (on average) two adjacent villages are, in blocks.
We really should have something similar to the APIDump plugin, but then for the world configuration.