I think the first step is to make the encoder work.
I agree with Wawa. You are clearly not reading the encoder properly. Based on the specific encoder reading algorithm you should get 1024, 2048, or 4096 counts per revolution of an encoder with 1024 pulses per revolution. You can read 1,2, or 4 of the quadrature steps.
The code you are using reads two of the four and should produce 2048 counts per revolution. This certainly seems like enough resolution for your application, and should reliably indicate direction.
However, the code you are using is peculiar in that it reads rising edges on two interrupts and it is reading the first two pulses of the train of four instead of every other transition. To look at 2048 counts (instead of 4096,using the example #3 suggested by MarkT) a better algorithm is to trigger on one channel of the encoder CHANGE, and read the value of both channels in the ISR with digital read or faster alternatives. If both channels are high or low, it is going in one direction, if they are opposite, its going in the other.
It is basically the approach of the second example in the Arduino Playground Encoder tutorial, but be aware that the example in the tutorial uses Serial.print() in the ISR which is likely to fail.
Getting your information on the lcd is very simple so fix the encoder reading first. Your counts are not correct, the divisor should be 20.48, and something is wrong with the direction.
If I start CCW however I get 6238.00 as the starting number and counts down from there.
What is the datatype of "counter".
Did you try "unsigned". e.g. unsigned int counter = 0;
volatile unsigned int counter=0;
"Volatile" is correct for a value changed within an ISR. Depending upon how may revolutions you make in a direction it could be a volatile int since you only have 2048 counts per revolution. I do believe that you should be using a volatile int (or long) because if you start at 0 and go ccw you want it to start reading -1.