The whole structure and philosophy of Facter serves the goal of allowing for platform-agnostic usage and development. The same collection of facts (roughly) is available on all supported platforms. This allows Puppet users to keep a coherent development style throughout their manifests for all those different systems.
Facter forms a layer of abstraction over the characteristics of both hardware and software. It is an important piece of Puppet's platform-independent architecture. Another feature that was mentioned before is the type and provider subsystem. Types and providers are explored in greater detail in the following sections.