I make quite extensive use of Bezier Curve objects in Blender, I use them a lot more than I actually use mesh objects.
I work mainly in architecture mostly doing archviz, decoration and interior design projects. This is not a popular nor 'standard' modeling technique, and I am well aware how exotic it is, even in this business area.
Curve objects in Blender suffer from certain limitations when compared to meshes, like limited availability of modifiers, poor texture mapping capabilities, can't be unwrapped, can't have particles or participate in Boolean operations, and can't be rigged or easily animated with armatures like meshes do, although Geometry Nodes alleviated most of these.
However some of their very limitations are also their biggest strength, and when taken advantage of, provide particular constraints that make them well suited for these use cases.
Bezier Curves
By optionally being inherently bidimensional, bezier curve objects (in 2D Mode) automatically guarantee a flat 2D surface, avoiding dealing with accidental non planar surfaces unintentional caused by negligent geometry snapping, which is a frequent occurrence in real world modelling.
Because they you don't have to work with faces directly, you don't have to worry much about topology nor maintaining a good edge flows like you would with mesh objects. This alone lifts a huge burden and frees you from worrying about mico-managing geometry, and focus on speed and efficiency.
Hard-edge modelling is much easier, mixed straight and curved shapes live happily together, automatically handled by the bezier handle types and curve fill engine as well; so you also avoid having to worry about adding support edge loops or unwanted smoothing in straight areas as you would with subdivision based models.
Since curves have a builtin quality setting for curved segments smoothness you don't have to use Subdiv Modifiers which are often a source of concern for topology, while maintaining quality settings non destructive.
Because the fill engine also handles automatically inner curves and recursive shapes inside shapes it easily creates holes and islands inside outlines, avoiding extensive use of Booleans, which are slow, error prone and a frequent source of frustration.
The builtin bevelling, offsetting and extrusion features allow for a non destructive workflow, which you can easily go back to and change parametrically without having to redo manually.
Bevel objects also allow defining extrusion shapes along complex paths, common in metal work, frames and railings frequently found in architecture, and often provided in CAD format by manufacturers.
In building and construction area, Bezier curve objects end up being very versatile in designing:
- Building walls, which can conveniently be defined as an extrusion of an architectural plan outline, that is often already provided by the architect, guaranteeing planar closed shapes with dimensional accuracy.
- Facades, curtain walls, and elevations can also be easily defined from client provided elevation drawings, since again they are often mainly bi-dimensional extrusion structures with holes and island that are well defined from a 2D closed curve with holes for windows, doors, openings and stonework around them.
- Pavement finishes or floor areas (like an room with a certain type of wood, carpet or ceramic tile finish) which are defined by a closed boundaries combining complex shapes with mixed curved and straight geometries.
- Concrete slabs, or extensive ceilings areas with arbitrarily shaped openings for lighting and holes for installed equipment, are also easy to define because you don't have to worry about topology, manually deal with gaps, fill holes nor use booleans.
- Railings, metal work, extrusion profiles and frames along complex paths are easily handled by the builtin Bevel objects.
- A lot of other real world objects made from sheet materials (like table tops, wood board, furniture, cabinetry and carpentries) benefit from the same advantages like easy extrusion, tessellation and bevelling.
Other than that, they are also very useful as complement for illustration based graphical design type of work, like Logo design and symbol creation, or 2D type of motion graphics often used in TV, video and animation work.
NURBS
NURBS surfaces on the other hand are more suited for smooth almost organic-like shapes used in vehicle design like cars, boats, airplanes, or more aerodynamic industrial design objects.
They differ from subdivision surface because you never deal with faces directly, the emphasis on precision, trimming with trim surfaces, Boolean operations and BREP (Boundary Representation) or CSC (Constructive Solid Geometry).
Looking at Blender alone it's hard to imagine using them as an actual full featured modelling tool, since Blender's NURBS tools are admittedly a stub, with very limited features and lacking tools.
They are there more as a remnant of the past than as an actual production ready tool. Other dedicated software like Rhino, MoI, Katia, etc. have actually usable and full featured NURBS modelling workflow, capable of very accurate surface definition, surface trimming, Boolean operations, etc.
They are very suited for actual technical drawing extraction from models, since correct and exact elevations, plans and sections can be extracted from a NURBS or Solid based 3D model.
Paths
In practice, Paths in Blender are just NURBS curves (without surfaces). From what I gather they are mostly used for animations purposes, mainly to define animation paths animated objects may follow, sort like a railway. They are mathematically more accurately and precisely defined, yielding smoother animations and avoiding jitters and sudden movements or imprecise trajectories.
These can typically occur with bezier curves during animations specifically when having objects follow 3D curves in a scene, like a Follow Path constraint, or using Ctrl + P Make Parent > Follow Path.