I think this is where the confusion stems from, the way I understand it:
Mastodon is a server that implements the federation part of the ActivityPub protocol to exchange objects with compatible server software. It has functionality which exceeds the ActivityPub client-to-server protocol, which it doesn't implement, and opts to instead have its own client API. [1]
So if you were to write an application using the ActivityPub C2S protocol, you could not directly communicate with a Mastodon server, but could interact with objects created by a Mastodon server through another server software implementing both the federation and C2S protocol.
So in that sense they are Mastodon frontends because they probably use the Mastodon specific API instead of the ActivityPub C2S protocol.
Here is for example a list of implementations which includes whether the client-to-server protocol is supported [2].
[1]: https://github.com/mastodon/mastodon/issues/10520 [2]: https://activitypub.rocks/implementation-report/