You could try to concatenate the pretrained weight matrix with a newly initialized tensor to create the new weight matrix with the extended vocabulary.
To keep the pretrained embedding matrix constant, you could register a hook to zero out the gradients of this part of the weight.
Here is a small code snippet to demonstrate this approach:
vocab_size = 2
embedding_dim = 10
emb = nn.Embedding(vocab_size, embedding_dim)

# Add vocab
emb.weight = nn.Parameter(
    torch.cat((emb.weight, torch.randn(2, embedding_dim))))

# Register hook to zero out gradients of pretrained embedding weights
mask = torch.zeros_like(emb.weight)
mask[2:] = 1.
emb.weight.register_hook(lambda grad: grad*mask)

# Training
x = torch.randint(0, 4, (10,))
out = emb(x)
out.mean().backward()

# Should pring zeros in first half
print(emb.weight.grad)

Let me know, if this would work for you.