The step input should control the rate of the counter, which would then control the rate at which the sine table is traversed and therefore the frequency of the output. Therefore to implement a chirp, the step would be changing with time according to the rate of change you want for the output frequency.
I would also suggest modifying your implementation as follows:
Use a single counter of even higher precision (as is typically done) and then just select the 12 most significant bits out of that one counter to be your address counter. The counter output represents a scaled phase versus time, and selecting the most significant bits is referred to as "phase truncation". The Look Up Table is effectively doing the trigonometric operation of returning the sine of the phase. The phase therefore ranges from 0 to $2 \pi$ as the address counter goes from $0$ to $N$ for $N-1$ address locations. The amount of precision to use in the first counter will set the frequency resolution that each step will represent (as detailed in the post referenced in the question).
Below shows a different but typical NCO implementation. The block with the $z^{-1}$ represents a unit sample delay, such that the output is the previous output plus the current input (an accumulator or counter). By changing the input word (step size) we change the rate that the counter increases and eventually overflows. It is very important that it wrap on an overflow. Every overflow ends up being one cycle through the LUT or one cycle of the sine wave output: