I'm speaking from a memory that is a bit hazy about things that may be a bit dated, so no promises this is correct or current.
- Lack of GUI user interactions is obvious. FFF has a significant number of places it solicits user input.
- FFF (plugin) is structured to run downloads in Calibre's background processing framework. Plugin CLI doesn't have that available.
- Plugins find each other (and many built-in 'Actions' such as Convert Books, Remove Books, etc) through self.gui.iactions. Plugin CLI doesn't have self.gui available to call them through. And plugins frequently need self.gui also. Heck, could Generate Cover even find fonts without gui access?
- I'm not 100% clear on why GUI plugins are supposed to use self.gui.proceed_question() to ensure library database consistency but CLI is allowed to update (via server)--looks like the same conflicts to me.