Actually there's very little difference. If you look at the code that Add Service Reference creates you'll see that it uses ChannelFactory internally.
The best resource to understand what happens when you use Add Service Reference or do it yourself manually is Miguel Castro's WCF the Manual Way…the Right Way
Also, you can read the section on "Adding Behaviors to the Runtime" of Extending WCF with Custom Behaviors, it explains how the metadata is handled.
Basically when you host the service (create a ServiceHost, either explicitly by newing up a ServiceHost or when you host your service in IIS and it gets created by the IHttpHandler that handles the .svc file) the type is read first (looking for attributes) and then the configuration file (web/app.config). The same happens in the client, although it is not very common to have annotations in the contract interface in the client.