Let's look at the basics: If you have an incoming clock (say 10 MHz in your case) and you want to derive any clock from it, these derived clocks will inevitably be delayed from the original clock, even when you are smart and avoid ripple counters and clock gating. Also, the distribution of your many clocks might use local (instead of global) routing. Whatever you do, you end up with a sloppy clock structure, which invites hold-time problems when the different clock domains have to interact. (If they don't, you really have no problem.)
Dumb clock gating can create glitches, mixing non-synchronous clocks can create metastability problem, but even the most careful clock selection scheme is dangerous.
Clock Enable avoids all these problems (except the metastability). That's why we all favor CE (except for its higher power consumption). Peter Alfke, Xilinx Applications