NHibernate has two caches:
a Session-level cache (1st level) and a SessionFactory-level cache (2nd level). (cf.
NHibernate.Caches)
These caches are used to track changes (among other things).
In your case, you will probably use two different sessions to load and save your customer. It means that only the 2nd level cache can give NHibernate the information it needs to find the changes.
By default, update commands are compiled when creating the SessionFactory; it means that when you save an entity all its properties are sent to the database.
You can enable "dynamic-update" to ask NHibernate to create a specific update command for each case (and with only the changed properties).
Finally, as you said, your client should not be aware of NHibernate (and even the persistence strategy)... Anyway, it depends of your requirements.