NURBs are more high-level compared to triangles. Single triangle primitive cannot be ill-defined and is much easier to rasterize. There are other high level contenders - for example SDFs and voxels. Instead of branching out the HW to offer acceleration for each of these, they can all be reduced to triangles and made to fit in modern graphics pipeline.
It's like having a basic VM, high-level languages are compiled to the intermediate representation where things are simpler and various optimizations can be applied.