I actually wonder if they just *look* too complicated? Maybe because they are verbose?
Each time you define a functor you also have to give the signature of its argument, which, compared to a simple "include" can look overkilling.
Concretely:
module A = struct
...
end
module B = struct
include A
...
end
VS
module A = struct
...
end
module type B_INPUT = sig
... (can be big)
end
module Make_B (X:B_INPUT) = struct
...
end