Hey,
With SRPs, the currently recommended way to customize shaders is via Shader Graph. Of course, this is only possible when customizing the “higher level” description of the shader target (such as the Surface inputs).
To fully customize shaders via text, or modify the innards of the shader, you currently need to modify the ShaderLab and shader includes as you describe.
To address this, we are working on the new Block Shader Language Block Shaders: Surface Shaders for SRPs and more (Public Demo Now Available!)
This will provide a text-based workflow, conceptually similar to legacy Surface Shaders (Built In Render Pipeline). We will provide “templates” for the SRP shaders, which correspond to the inner implementation (subshader, passes…). These templates would be modular, and could be modified and extended more easily.