How can I restrict user from modifying file in a document library but be able to change the meta-data for the file.
If you use content types, you can restrict the choices available in metadata editing, but otherwise, I think the permission levels on the document and it's metadata are the same.
I can suggest a solution that might work. You can create an event handler, calculate a checksum for a file on ItemAdded event and save it in the hidden field in the same list item. Then on the ItemUpdating event you can compute a checksum for a new file, compare with the saved one and cancel the update if they are not equal.