Let be honest, HATEOAS is not worth implementing.

However, it sounds like your issue isn't really about HATEOAS. It's about what's included in the model. Even if the api caller already knows all the endpoints they will still have to make two calls, GetBook and GetLibraryWithBookIn, unless you invent a new ViewModel BookWithLibraryInfo and add API methods to retrieve it.

I would advise against this as each user of the API will want different ViewModels, you'll end up with hundreds of them. Sticking to the Models that map to the DB tables is a good policy.

There is an alternative way around the problem, which is to make a second API as part of the website backend.

This would make multiple calls to the APIs, combine the data according to the needs of the website into view models and return them to the front end in a single call.

That way the front end can have the specific view models they need and the API can remain generic and useable by main applications.