Sculpt deformers won’t add geometry, though, so if you don’t have the topology to do it with blend shapes you probably can’t do it with sculpt either. They’re both just vertex deformers.
I’m not sure what what results you got from displacement maps and how they were different from what you want, but that’s what I’d try.* I’d use regular (not vector) displacement maps, and be sure to use floating-point maps where “no displacement” is 0.* (Don’t use fixed-point maps where “no displacement” is grey.)
To fade between two displacement maps, try a layeredTexture node, and connect to the alpha value of the top layer.* That should let you fade the veins on and off.
You can also connect a ramp or texture mask to alpha to control where veins appear, or make them appear on the arms before the neck. (You can even use another layeredTexture node to create the mask from various sources and then feed that into alpha on the main layeredTexture node.* I don’t know if all renderers will handle this.)
You could also have one displacement map without veins (with just any other displacement detail), and then have a map with only veins and none of the other detail. To show veins, you’d add the vein displacement to the base displacement where you want them to appear.* layeredTexture can do this with the “add” blend mode.
The neat thing about that is you can manipulate the vein displacement by itself before adding it in. For example, you could create a noise node and multiply the vein map by it. That would let you add some noise to the veins, and since it’s separate from main displacement it wouldn’t add noise to the character’s entire body. Then you plug the output of that into the layeredTexture node. You could animate the noise, moving it around by animating the UV offset to make it move (assuming a UV map where this makes sense), or animate other noise properties. It might give part of a “pulsing/rippling” effect.