Most standard exceptions have chaining-aware constructors. For exceptions that don’t, you can set the cause using Throwable’s initCause method. Not only does exception chaining let you access the cause programmatically (with getCause), but it integrates the cause’s stack trace into that of the higher-level exception.
I don't think there's a strong enough recommendation here (i.e., a bolded statement). Something like: Err on chaining the lower layer exception into the higher one — it can be valuable for debugging — unless you know it doesn't add any value.
So, along with that, consider providing chaining-aware constructors.