Yes, the backpropagation works for both encoder and decoder. You can test that by looking at the list of paramaters in unsupervised_model.parameters():
p = list(unsupervised_model.parameters())
for w in p:
    print(w.shape)

which will print the following:
torch.Size([136, 136])
torch.Size([136])
torch.Size([1, 136])
torch.Size([1])
torch.Size([136, 1])
torch.Size([136])
torch.Size([136, 136])
torch.Size([136])

and these are all the parameters for both encoder and decoder.
Although, it’s a bit unusual to pass encoder to the autoencoder. You can define the encoder object inside Autoencdoer. The following code will achieve the same thing, but more readable.
class Autoencoder(nn.Module):
    def __init__(self):
        super(Autoencoder, self).__init__()

        self.encoder = Encoder()
        self.decoder = nn.Sequential(
            nn.Linear(1, 136),
            nn.ReLU(),
            nn.Linear(136, 136),
        )

    def forward(self, x):
        encoded = self.encoder(x)
        return self.decoder(encoded)

Then, creating an instance of the model will be with just one call:
unsupervised_model = Autoencoder().to(device)