Doesn't deployProxy() initialize the implementation contract?

The plugins help call the initializer on the proxy, while the constructor as Skyge mentioned can be used to disable initializers on the implementation contract itself. See this post for more details.

The reason for disabling initializers on the implementation is explained here. Note that this still allows you to call your contract's initializer through the proxy address (which is what deployProxy() does).