Generic attributes (as opposed to builtin attributes) will be necessary to cover many use cases with curves, otherwise the possible operations are quite limited.
Point attributes should be stored separately on every spline in order to facilitate making editing a single spline cheaper if there are many splines. Spline domain attributes should be stored on the curve. In both cases we can use CustomData for storage (other methods would be possible but that already exists).
Storing the attributes on every spline necessitates a refactor of the attribute system. One idea for that is in P2090. The basic idea is that an provider providing an attribute interface can be provided for each data type. In other words, it wouldn't be part of GeometryComponent anymore.