Is it equivalent for these two ways on the capability for implementing any graphical features?
Yes. Both approaches allow you to do any feature, whether it's PBR, shadowmapping, post-processing etc.
The difference is in the level of control you have and what amount of work you have to do.
With hooking, you are overriding parts of the engine. You get partial control or full control, depending on what you override. In some ways, it might be easier, in others it might be harder.
In a single mod, you need to write the entire renderer from scratch. The game state is already there in the form of client entities, i.e. their transformation data & which model they use. You get full control by design, but it also takes the most amount of work.
I was wondering that the new renderer is opaque for the original gameplay
In the case of hooking, it should generally work as a simple "addon" to most mods and vanilla games, so it shouldn't affect original gameplay whatsoever.
In the case of a single mod, it can only be ported to other mods if they are source-available or they don't use any custom code (so you can simply insert your own DLLs there). It's more useful to people who are making mods, so they can have rendering features out of the box and not worry about DLL injection and other stuff that may potentially trigger VAC.
There's a 3rd option, and that is using Xash, which will give you complete engine-side freedom to implement things. It is a Quake fork that mimics GoldSRC, but there are some grey area legal issues.