The main point about the definition status (primitive or fully-defined) is that they related not to the inherent nature of the concept itself but to the sufficiency of the set of currently provided defining relationships in SNOMED CT. So the way to tell if a concept is primitive or fully-defined is to look at the definitionStatusId attribute of the concept. If the author looks at the defining relationships and considers that ALL concepts for which all those defining relationships are true would be either the concept named by the fully-specified name or a subtype of that concept - then they marked the concept as fully-defined. Otherwise it is marked as primitive.
There are four distinct reasons why a concept may be primitive
Because it is inherently impossible to define some concepts by defining relationships with other concepts.
For example: Both | procedure | and | clinical finding | are just defined as subtypes of | SNOMED CT Concept |. They are very different concepts but how could we indicate that difference between using defining relationships to other concepts.
Because the attributes that would distinguish the concept from another concept are not (yet) in the concept model
For example, | burning pain | is a subtype of | pain | but SNOMED CT does not (yet) have an attribute to make that distinction. It is possible to think of attributes which might fill this gap perhaps something like "nature of sensation" but a key point is that we don't just add attributes each time one is needed (that has been tried in the past and leads to overlaps and inconsistency that are unhelpful - e.g. someone might choose "type of pain" and this would have a more restricted use that "nature of sensation". The SNOMED CT approach is to add defining attributes to the concept model to prioritize attributes that are applicable to a lot of concepts and to document their usage so the defining relationships applied are reproducible (i.e. so different authors modeling a concept will make the same decision based on common rules).
Because the concept is not in a directly clinical domain but in one of the supporting domains used to define clinical concepts
For example, physical forces, substances, body structure). While some of these do have defining relationships the purpose of these is to support the logical definitions of the clinical content. SNOMED CT is not intending to fully-define chemical, forces ... etc. so most if not all of these will be primitive. As with point 2 this is not an absolute limit but one driven by priorities for supporting meaningful representation of clinical concepts.
Because modeling of defining relationships is a continuing process and in same cases is incomplete
Even where all the attributes required to fully define a concept are present and supported the concept may not be fully modeled. In each new release of SNOMED CT more concepts are fully-defined. However, concepts are added to SNOMED CT based on identified requirements and in some cases the concept is needed more quickly than it can be fully modeled.
The reason it matters whether a concept is or is not fully-defined is that if it is fully-defined then it is possible to automatically infer all it is subtype concepts. If it is primitive then those subtypes need to be explicitly asserted by | is a | relationships stated by an author.