The way ServiceAccountCredential was designed is that it's thread safe, so you can't change the User data. However, we may change the current getter property User to be similar Token (in the way that we look when getting and setting it). Please feel free to open a new issue in our issue tracker and elaborate more.
For now, you should use a new service and for each "user", as following:
ServiceAccountCredential.Initializer initializer =
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = serviceAccountScope,
User = "user1@myDomain.com"
}.FromCertificate(certificate);
var service1 = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = new ServiceAccountCredential(initializer),
ApplicationName = appName,
});
initializer.User = "user2@myDomain.com"
var service2 = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = new ServiceAccountCredential(initializer),`
ApplicationName = appName,
});