Hidden fields can be used everywhere non-hidden fields can, including skips. There are two ways hidden fields are often added to surveys: as a pass-in field, or as a hidden variable in a free format question.
For a pass-in field, you can set the value at any point in the survey with Sawtooth Script, but you may need to wait until some questions are answered before setting the pass-in field. Consider this example:
[% SetValue(Qsum, Q1 + Q2) %]
That code will set the pass-in field "Qsum" to the sum of numeric questions "Q1" and "Q2." That script will work on any page AFTER Q1 and Q2 - it won't be able to sum up the numbers correctly if it is ran before or on the same page as those two questions.
All of that applies to hidden variables in free formats as well. If you add a Qsum free format question anywhere in the survey, you can use the same Sawtooth Script as before to set the hidden variable:
[% SetValue(Qsum_sum, Q1 + Q2) %]
The one additional feature offered by hidden variables is that you can set them in the HTML on the page as well as with Sawtooth Script / Perl. If you were to put the Qsum free format question after Q1 and Q2, you could put this code in the free format:
<input type="hidden" name="Qsum_sum" id="Qsum_sum" value="[% Q1 + Q2 %]"/>
Does that help clear things up? I'd be happy to explain further or help you code up a specific hidden variable you are working on.