All of the variables declared in the calling policy will be available in the called fragment, however because the policy manager does not know what policy will be calling the fragment it cannot prototype them for you, but they will work at run time. The assertion 'Export Variables from Fragment' will return variables to the calling policy but is not required to import variables, that is automatic. Also, there are certain variables that exist by reference and so modifications to them will be returned reguardeless of whether exporting (i.e. the request, response, and error template objects). You should also note that the error template (unlike request and response) acts like a just in time object, so variables refrenced within it that are declared within a fragment must be exported in order for their values to be available at the end of the parent policy execution.
If you want more regimented varable declarations (and to be able to reference them in the policy fragment without a validation warning) then you should wrap your fragment as an encapsulated assertion, which can import variables implicetly (by leaving the 'Show in assertions properties dialog' unchecked) so you don't have to type them in.