An alternative would be to have a policy where all the app repos must use the same version (nobody can upgrade until they all upgrade). This makes things harder for the library maintainers, but no more than a monorepo.
I don't see why you'd need semver. The apps could sync to a particular commit in the library repo.