While my solution may be specific to my problem here, I figured it might be useful to document it.
In the end I made an INTERFACE library that wraps the imported library and adds INTERFACE_LINK_OPTIONS:
add_library(SphereAssimp INTERFACE)
target_link_libraries(SphereAssimp INTERFACE assimp::assimp)
target_link_options(SphereAssimp INTERFACE "LINKER:-rpath,${LIBDIR}/lib")
This nicely propagates. One caveat: even targets that are only included in “implementation files” (.cpp, .c, .cc, whatever) must be target_link_libraries(PUBLIC) for this to propagate correctly. Link options are in that sense part of the ‘interface’, and if your consumers need it down the road, they need to be exposed, even if they don’t need other properties like their INTERFACE_INCLUDE_DIRS.
Thanks again, really happy to have this working!