Facts are a great way of identifying properties of a system, and can be used in puppet manifests as conditions or parameters. Facts however cannot be overriden from within the manifest -they are protected, static variables . By assigning the value of a Fact to a custom variable however that protection is gone and you can use the new variable to override, for example, the operating system version, or whether the system is virtualized.
See also: Section 4.4, “Using Facts and Variables”