I believe that it already does handle vertical and horizontal "frequencies". It just might be hard to see with examples you've tried. In the way I defined the lissajous function, the w argument is basically the ratio of the vertical and horizontal "frequencies". There are some subtleties here, because if it's not rational, then the curve doesn't "close", and if you don't extend your tmax far enough, you might not be getting enough "cycles" of the curve to see all of the "bumps". Also, the view angle can make it easier or harder to see.
For example, using my original definition, execute this:
ParametricPlot3D[
Lissajous3D[1, 1, 4/3, Pi/3][t, s], {s, 0, .1}, {t, 0, 6 Pi},
ViewPoint -> Front, ViewProjection -> "Orthographic",
ColorFunction -> (White &), MeshStyle -> None,
PlotPoints -> {20, 60},
Lighting -> {{"Point", Blue, {0, -5, 0}}, {"Point",
Green, {3, -5, 0}}}, Axes -> False]
Then execute this:
ParametricPlot3D[
Lissajous3D[1, 1, 3/4, Pi/2][t, s], {s, 0, .1}, {t, 0, 8 Pi},
ViewPoint -> Front, ViewProjection -> "Orthographic",
ColorFunction -> (White &), MeshStyle -> None,
PlotPoints -> {20, 60},
Lighting -> {{"Point", Blue, {0, -5, 0}}, {"Point",
Green, {3, -5, 0}}}, Axes -> False]
So, what you could do in your Manipulate is have a slider for vertical frequency and another for horizontal frequency (use new variable names for these--e.g. hf, vf-- and get rid of w), and then in the Lissajous3D expression, replace w with vf/hf.