Even if you did a material entirely shader-side, if you want a texture as output, you still have to bake the end results.
Keep in mind that a shader rasterizes model information from a camera perspective, not in uv-space.
Just as a thought-experiment, if you want to take it one further you could not use a texture at all and render your final result entirely shader-side.
This would be useless for real-time applications, as your average materials easily takes a few seconds to be computed, so just one material would drop your fps to 1 frame each couple of seconds.
For raytraced renders it would be an equal slow-down in terms of just computation time.
For both realtime and not, you're also dealing with dozens to hundereds of texture-buffers (one for each node) which would eat up a lot of memory, and have to be written and read again and again through memory each frame.