This is a big topic and - while I have used and developed Salat - I don't claim to have deep Mongo expertise, I'll provide my thoughts on this as a starting point.
Salat isn't (nor does it strive to be) a full-featured ORM library - like, for example, Hibernate, which sets up DB schema and relational integrity constraints from annotations. Salat doesn't do that. What it does do is provide simple case-class (and case object) serialization to Mongo. Otherwise, many of it's "DAO" function calls delegate directly to the underlying Casbah library, but with the boilerplate of the Grater serialization calls handled for you.
As you mentioned, the @Key annotation is really just a "rename" or "alias" annotation. It does not define the primary key of the case class. However, because many pre-existing Scala case classes do NOT have a field named "_id" the @Key annotation is useful for making the translation between your database document (with _id) and your case class (with groupId) seamless.
But what about the fact that groupId is not an ObjectId? The Mongo documentation has a bit to say about this. I would recommend starting there, and posting follow up questions in the Mongo lists / support / StackOverflow. This is a general problem not specific to Salat.
https://docs.mongodb.com/manual/core/document/One additional thing I would add: you might consider having an intermediary "holder" case class that is exactly like your domain object / record case class, save that it has an _id: ObjectId. There's nothing stopping you from having your document collection having two indexes: the automatic one for _id, and a second one (also with a unique constraint) for the groupId: String field. Of course, you would not use DAO.findById to look up records by their groupId. You would use the normal find() or findOne() methods.
So you might have
case class ThingHolder(_id: ObjectId, thing: Thing)
That's up to you, of course. Some people don't like the "noise" of having two ID fields (the "auto" one and the natural one from the data). It depends on factors outside the scope of this question.
Hope this helps!