FYI - I ended up getting that working.
Yes, I followed all of the steps to create the service account and authorize it for our Google Apps Domain. That isn't the issue.
All of the sample code and examples for using the Service Account fail to show where or how to set the ServiceAccountUser on the GoogleCredential returned from OfflineCredentials Builder.
Simply specifying the location of the JSON file in the ads.properties file only gets you so far. You can receive an accessToken on the GoogleCredential created with the OfflineCredentials Builder, but I could not set the serviceAccountUser as that appears to be required at build time. It would be ideal to have a property for this user in the ads.properties file, or allow for setting this in the OfflineCredentials Builder object.
You are correct that there are a lot of ways to configure impersonation and I managed to dig into the code and replicate my own builder that pulled from the ServiceAccount JSON file and allows for specifying the ServiceAccount user, but I'm not sure why OfflineCredentials and the Adwords Java library doesn't support this. Again, it looks like some of the other SDKs do support specifying the service account user in a property. (e.g. Ruby's YAML "ouath2_prn")
Something like this would be a great addition to the next release of the Java SDK.