A better tool to read data from HBase is Phoenix. Phoenix is purpose built to run on top of HBase. I think you should consider using that.
Data is stored in HBase in lexicographical order. So 1, 2, 3, 4, 5, 6, 7, 8, 9 , 10 will be stored as 1, 10, 2, 3, 4, 5, 6, 7, 8, 9.
When you are reading data using Impala, order by sorts according to lexicographical order. You are going to see incorrect results and think that order by is not working because of the way HBase orders data. You should only do order by on "String" columns for correct results.
as for your date comparison, you are rightly using to_date() and you can use datediff (timestamp, timestamp) to get days between two timstamps.