I would only give that title to something that is interoperable or potentially interoperable with other apps. Some random spammer abusing relays as free storage isn't a real client, for example. An app can also use Nostr identities and consume Nostr data but not want to be interoperable, and I think that makes it not a client, or a partial client, but that isn't a bad thing either. We don't have to use Nostr events for things not suited for Nostr events.