>>8Yes, I get that. Personally I'd probably just use a plain integer type as the pointer type, and just have each function extract the index within the last word of the bit array via a modulo operation.
Storing an extra position (q) for seeking is an interesting idea; but since it's extra state to manage you might consider adding a stream abstraction on top of the basic bit-buffer implementation instead of combining them like this.