Hello,
when I made my very first saw and square LFOs I got the same problem as you -
clicks caused by fast (single-sample) changes of LFO output value - these
happen once in a saw cycle and twice for a square cycle.
What I did is make the LFO forms smoother, to have a soft knee. Such a method
for a saw wave, for example, means it grows from 0 to 1 in 1/20 of the
perioud and then decays from 1 to 0 in the rest 19/20 of the period. I can
send you the C code if you need, it implements basic LFO functions using very
simple math.
I hope this helps.
Artemiy.