So what you want is a rotary encoder. They work similar to the way a desktop computer mouse works, except that unlike a mouse which is continually moved, they can work with purely mechanical internal switches (a mouse often uses optical encoder because of its more frequent movement.
Anyway, a rotary encoder works by having two internal contacts, which make and break in a very specific order, called Quadrature. Look at this graph of the way the contacts change state over time...
If you study it carefully, you can see that it is possible to write code to identify the direction of movement, with each transition. A further advantage of this scheme is that even though you always want to apply an algorithm to debounce contacts, its not very critical with the quadrature scheme, because the worst that can happen is usually just random toggling of one count up or down (unlike a simple UP/DOWN button pair, where a poor contact could mean several skips to a higher or lower setting).
Hope this helps. If you have trouble writing or finding pre-written code for dealing with the rotary encoder output, I can add to this post.
Or, since you don't seem to have a microcontroller in your circuit yet, its possible to do this with ordinary logic ICs too. For example, if you take a 'D' type flip flop, and connect one of the encoder outputs to the 'D' input, and the other to the clock input (with pull up resistors as needed, of course) the flip flop output will always indicate whether you're turning CW or CCW. If you then add a little more logic to simply change state when ANY transition has occurred (like an exclusive or gate), then you'll have both direction, and up/down pulses, just as you did with the simple buttons.