Practical example: I have a bird that's being chased by another bird, and they overlap in the shot. There's weird lighting on the bird that's further away, so I need to grade them differently. But they overlap so now I have a challenge. I could try to do this using layers and masks: mask both birds in a way that the masks don't overlap, while perfectly tweaking the mask feathering so that there's minimal bleed on their overlap, then tie each mask to an adjustment layer.
But if I have graph based adjustments available, I first split my input into separate nodes for the background and each bird, then for each of those, I can send them through a node that masks them appropriately without worrying about mask overlap. I can then chain adjustment nodes to grade all three and I can save those grades separately, too so I can use them on other shots from the same series, then I can send each chain into a muxer that turns the three elements back into a single composition.
I could do that with layers, where I clone the full image several times, create my adjustments in groups, then render each group to a new layer, hide everything else, and mix those layers, but now what do I do if I want to tweak the grading? Delete my layer, unhide the group, tweak the adjustments, rerender the group, mix the new "final" layer in, and holy crap how many things I did I just need to do that weren't "making my adjustments"? Whereas with a node graph you just make your adjustment. Done, your change simply cascades through the graph.
There's a lot that you can do with layers, but layers are just a linear graph: you can do more if you can branch and merge your graph.