If unnormalized data is found, should an exception be raised, or the data be normalized forthwith, or only if necessary?
All user-level comparison should behave as if it normalizes the input to NFC. For example, the Unicode Collation Algorithm does that. Most binary character matching that affects users should also behave as if it normalizes the input to NFC. Because it is rare to have non-NFC text, an optimized implementation can do such comparison very quickly.