The problem is that the params contained in self.myParametersList are not recognised as being params of myNetwork. There are several possible solutions…
The nicest solution is to have myNetwork.__init__ initialise the list of myUnit submodules.
This is the cleanest solution and, I imagine, the one that most people would prefer.
This way the myNetwork instance has a list of registered submodules thanks to nn.ModuleList and each myUnit instance has its own registered parameter tensor, and PyTorch automatically figures out what parameters need updating.
class myUnit(nn.Module):
    def __init__(self):
        super(myUnit, self).__init__()
        self.myParameter = Parameter(torch.randn(2,2), requires_grad=True)

    def forward(self, input):
        # same as your code

class myNetwork(nn.Module):
    def __init__(self, numUnits):
        super(myNetwork, self).__init__()
        self.mySubmodulesList = nn.ModuleList([myUnit() for _ in range(numUnits)])

    def forward(self, input):
        output_final = Variable(torch.zeros(2,2))
        for u in range(len(self.mySubmodulesList)):
            output_1, output_2 = self.mySubmodulesList[u](input)
            input = output_1 # cloning output_1 seems unnecessary as output_1 is never used elsewhere.
            output_final = output_final + output_2 # I am not certain that an inplace add_ will not cause errors during the backward pass
            return output_final

A hackier solution would involve looping through the list of parameters adding each one explicitly using register_parameter 2.
self.myParametersList = myParametersList
for i, myParam in enumerate(self.myParametersList):
    self.register_parameter("myParam"+str(i), myParam)