I don't know why people should code in the frame limiting.
Why not use the internal WaitTimer() command?
Well unless you've found a way to use WaitTimer with negative values to go back in time, it isn't going to help you when your computer can't keep up with the desired frequency. It also wastes all the available time it has if it can go faster than required, rather than putting it to good use. Short of no timing at all, it's probably the worst solution.
Should I indeed only go for 30 fps...??
That depends on your needs. If you're not using a physics engine and your logic is pretty straightforward, then it'll be fine. If you're using a physics engine, you'll probably either want to go higher than that or tell the physics engine to update in multiple small steps. If you're doing a lot of your own physics, again you'll probably want to go higher. If you've got a lot of heavy duty logic which takes a long time to run and very little in the way of physics, you may even want to go lower.