Replying to my own question:
Adjusting the values of the embedding layer does not seem to work, so I tried reinstating it instead.
The method below does function properly, with small caveats.
def add_embedding(self, n=10):
        # Create some extra embeddings and concatenate those to the original data
        new_embeddings = t.FloatTensor(n, self.embeds.weight.shape[1]).normal_()
        e = t.cat([self.embeds.weight.data, new_embeddings])
        self.embeds = t.nn.Embedding(e.shape[0], e.shape[1])
        self.embeds.weight.data = e

The problem of this is that the original parameter no longer exists, so the optimizer is no longer able to change any of the embedding weights. This means a new optimizer needs to be created as part of the training loop, so this is only possible using SGD without momentum.
Example of a simple training loop:
for i in range(100):
    # New optimizer which points towards the latest versions of the embeddings
    optimizer = t.optim.SGD(model.parameters(), lr=10) 
    optimizer.zero_grad()
    l = model.forward()
    l.backward()
    optimizer.step()
    model.add_embedding()

Still, if anybody knows of a way to modify the original embeddings and keep the original optimizer I would gladly know.