Also virt-builder is very procedural: https://github.com/libguestfs/libguestfs/blob/master/builder... It's "do this, then run this, and if this condition is true do something else". OCaml's strengths here are its brevity, speed and safety. No complicated features are used, eg. no functors, no difficult use of functions as first-class objects ...
(I'm not actually a fan of functors; I think they obscure the flow of the code, in the same way as using inheritance in OO).