This is far from a complete answer, but in my opinion, it seems that it can help you:
Instead of drawing curves from start to end point of the entire line, consider dividing your board into a uniformly distributed grid. Each square of one column of the grid has the right to have one point of one curve in it, and you will steadily move from left to right (first for the sake of simplicity).
Randomness comes into play by choosing a square for the curve - so that it does not become too chaotic, you could give this estimate of randomness, say, "you are not allowed to choose a square that (if the distance from square to square is considered 1 ) violates abs(current vertical position - new vertical position) <= 5 if at this moment none of them is free "or some other arbitrary restriction. ("If none of them is free anymore at this stage," itβs important, otherwise you can block yourself in an unsolvable state.)

(Sorry, drawing curves with my mouse -> worst / some interpolation ever. Catmull-Rom interpolation is likely to be your friend here, though, I think.)
The display should be free enough if your points in the curve cannot be randomly scattered along with the grid, but it is probably very difficult to make the curve connect to the end point βflowingβ - it may be a good solution, t mind arbitrary end points, although read how, the algorithm can decide for itself where it wants the line to end.
Think this idea can help you with your curves?
source share