A Hashfunction maps a bigger range of numbers to a smaller range of numbers (eg: 10214->1, 12489->2, 19057->3 etc). This smaller range of numbers is called the "hash". A Hashtable is a table (usually an array) that uses those hashes as an index to store data, therefor the name Hashtable. Im not aware of the term "hash" having any translation into other languages (well, some asian one maybe, i guess), which is probably why your translator failed.
Strictly speaking, a Jass Array acts like a hashtable too; otherwise, it would not be possible to access array[4000] of a newly created array without creating 4000 empty handle variables when doing so. WC probably internally maps the value 4000 to a smaller hash (like, 44, cause i like the 44, it looks kinda awesome. Of course, we cant tell what the hash really looks like) and uses this hash to store your value.
And if you are now thinking "that's impossible, there gotta be two different numbers that have the same hash": you're right. Its called hash collision, its the main problem of hashtables, its why hashtables tend to get slower and slower the more data you put into them, and it usually has a simple and inefficient solution.
Arrays in jass are indeed way faster than jass hashtables as they are one-dimensional and only have to map numbers from 0 to 8192. Its easier to get a hashfunction with less collisions with those restrictions taking place.
Then again, what warcraft calls hashtables is actually a hashtable without restrictions (its index is called parent key), holding another hashtable without restrictions (its index is called child key), holding the actual data. Mindblowing, and obviously way slower.
Because its hashfunction works for every number you give to it, it can be used to safe data without having to keep the index small (like you have to in arrays). Therefor, you can simply use Key(Unit handle) as an index, which is usually a number too big to be used as an array index.
Many people don't know what an actual hashtable is and therefor derive from that fact that people tend to use it with the Key(Unit) function that it can ONLY be used with the Key(Unit) function, but that is not the case. It does not necessarily have to be used to bind data to a unit, item or anything. It just rarely makes sense to use it for other things.