What is the best abstraction for HDL code?
You should completely ignore the terms "behavioral", "Register Transfer", and "Gate level".  I think these terms were invented by professors or people writing text books and have little or no relevance to "actually getting work done".  It's like scientists and professors inventing Latin names just for the sake of making them sound smart.  

Write your code (Verilog, VHDL, or whatever) so that you get the results you want and your code is readable and understandable.  After you have done this a while you will settle into a style that works for you.  

I should mention that the only way this can happen is if you learn everything about Verilog (or whatever).  Often there are features of the language that are not covered very well by books or professors but really help you efficiently write code that is easy to read.