The caching is done in Genie, and yes its for performance.
GenieACS has extensive APIs for you to do everything you need to do. In fact, the GUI uses the APIs exclusively and does not perform CRUD operations in Mongo at all.
Also, why do you need to create presets programatically? Are you doing one preset per subscriber? This will cause significant performance issues with Genie as on every interaction with a CPE every preset has to be checked to see if it applies to the CPE. See the wiki entry Example of a Provisioning Flow, Sergio wrote up the wiki entry using example code I sent to him.
I provision all of our subscribers using this process and a total of 20 presets. And only 2-3 of those presets actually run for each CPE (depending on the state of the CPE), and several of the presets we have a purely diagnostic/logging in nature (log when a CPE was bootstrapped, rebooted, performs a diagnostic event).