One common thing is to create your own proxy, service and data contracts on the client and not use service reference option. You still have to update things manually when service change but gives you ability to control classes and interfaces created for data and service contracts.
If you own both service side and client side, then you can also share types (by referencing a dll with data and service contracts). If you don't own service side, you can define your own interface and data contracts in the client. As long as they match with the service contracts things will work. You can use add reference or wsdl.exe utility to generate service and data contracts.
If you use Add Service Reference, you can check an option to use types from referenced assemblies. As long as you have reference to the service and data contract assemblies, add service reference will reuse the types.