You are paying for the more for the conversion from full float to half float each time you change the data than you would for the 2 bytes you save per half float.
So check what saves you more in the long run, less memory bandwidth or spending more time filling the VBO. If the CPU is idle often (waiting for vsync) then optimizing bandwidth at the cost of cpu time will win out, however if a lot of time is spend doing physics on the CPU then you can't afford to convert to half float.
Unless you have a very efficient conversion function for a type that is usually not built-in and you can afford the CPU hit I wouldn't bother.
Given that you are looking for a compacter data format then I suggest using a linear scale (u)int16 (set uniform to true to map {-32768, 32767} to {-1, 1} or {0, 65565} to {0, 1}) instead, if you don't need the precision near 0 then this will provide better accuracy.