After some more code digging and experiments I can answer my own question. A theme is a normal plugin and as such does not inherit any behavior from other plugins.
So you need to copy everything you need from the base theme library.js to your child theme. And of course, you need to declare client scripts explicitly.
Loading of missing templates from base theme is the only link between the base and the child theme.
I am trying to use the static hook:
static:messaging.canMessageUserto add custom logic to the permission checks if a user may message another user.
However, it seems that static hooks cannot alter the flow of nodebb. Throwing an error or returning false etc. do not do anything.
Shouldn't this rather be a filter hook?
Or am I misunderstanding something?