In LinuxCNC, position generation is separated from step generation. In the position generating loop, the system tracks the distance it has already moved along the current primitive (line or helix) and uses a simple formula to get the location that is distance D along that primitive. (Typically, this is done once per millisecond). This position can be used in different ways depending on whether you have servos, hardware step generation, or software step generation.
In a software step generation system, the difference between the old commanded position and the new commanded position is determined along each axis, and this is used to update the rates of a digital waveform generator using the direct digital synthesis method (DDS). Then, at a higher rate (typically every 20-50µs), the DDS determines for each axis whether a step should be generated at that time.
This is a different design than you are describing, but it is a more flexible one. For instance, by separating position generation from step generation, you can revise the blending algorithm in your position generation code without revising step generation; and you can replace software step generation with hardware step generation or servo control with algorithms like PID.
In your design, you can approximate the method I describe above by simply dicing your helical arc into line segments as described by Roland, and using those as inputs into your step generation code which understands only lines. In a sense, this is not too different from what LinuxCNC does, except that the curve primitive becomes sampled according to distance instead of according to time.