Paradoxaly, there was no problem at all with the code. The problem (although not exactly sure) must have been somewhere in between, but which exposed itself when I ran application in debbug mode. Once i change my testing method to logcat one, and ran in release mode, everything worked as expected, so the read() calls were not blocking, but reading constantly, and BluetoothSocket.close() worked as expected.
Seems that my bluetooth device was firing bytes into the stream so fast, that in debug mode something could not handle that (although like I mentioned above, am not completely sure what is the cause for that).
So to summarize, if someone will have same problems as me above, do not debug this situation, but run with Release mode, and if you need to test something, use logcat in this case.