Why do we need block hashes in blockchain?
on functionality:

from Andreas book "Mastering Bitcoin", Chapter 7:


  The primary identifier of a block is its cryptographic hash, a digital
  fingerprint, made by hashing the block header twice through the SHA256
  algorithm. The resulting 32-byte hash is called the block hash but is
  more accurately the block header hash, because only the block header
  is used to compute it...


This block hash is a reference to a previous block hash, which connects this block to the previous block in the blockchain. 


  Is it only there for reference ??


no, it's a pointer to the previous block, so the chain can be established. As in the linked article:


  one can not simply create a block "isolated" from the blockchain
  and then just "insert" it in the blockchain to win the reward
  it's necessary that a previous block is known before a new valid one is created.
  
  using block height?


again from Andreas book:
A block’s block hash always identifies a single block uniquely. A block also always has a specific block height. However, it is not always the case that a specific block height can identify a single block. Rather, two or more blocks might compete for a single position in the blockchain.

Further down, he mentions, that this comes into play when discussing forks.