Does it have to be using Perlin? If you do, maybe you can break the curve in several small curves, rebuild them with n points, and move those points using graph mapper.
Another option, if you just want random curves but keep the top and bottom points of the sine curve, what I did below was:
Divided sine curve into a list of points
Separating them in two lists - A for the fixed points, and B for the ones you will move randomly
I added an option using Perlin noise.. But I’m not sure it works the way you intended.
The perlin was applied on the whole curve, and then I replaced some of the points with the original points you wanted to be kept:
I have a list/tree of strip surfaces. The definition works correctly when I select one strip with List Item, but I want to run the same Perlin Noise → Polyline → Loft workflow for all branches. How should I manage the data tree so each strip lofts separately inside its own branch, instead of all curves lofting together? - added my file