Plugins are also C++ classes, and fall into two categories: Document Plugins and Application Plugins.
Document plugins are the type users are most aware of - a document plugin is linked with a specific user document at the time of its creation, saving and restoring its state along with the containing document. Pipeline components - sources, modifiers, sinks - are all document plugins, as are render model components - cameras, render engines, lights, materials, etc. It is not possible to create a document plugin without a valid open document.
Application plugins, in contrast, are not associated with any document, and do not save or restore any state. These plugins are usually created "behind the scenes" to perform a specific task, then destroyed, without any user intervention. Thus, application plugins often take on the role of strategy objects (as-in Strategy Design Pattern). Examples of application plugins include user interface plugins, scripting engines, and file format importers and exporters.
As you might expect, there are two types of plugin factory corresponding to the two types of plugin - the k3d::iapplication_plugin_factory and k3d::idocument_plugin_factory interfaces are used to instantiate application plugins and document plugins, respectively.