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.
Absolutely. I'm building a non-client app with nostr login only, because I love what nostr stands for in comparison with X etc. The app follows in the same spirit as nostr: education, fun, generosity etc. But that doesn't mean I'm making all data in the app event-based. There is no need to do this in my case, it would just fill up relays and degrade the UX needlessly.