At each timestep an LSTM unit receives a new input and combines this with the value in its hidden state AND with its previous output value. It produces a new hidden value, and an output value.
This output value is fed into the next layer of your model.
Suppose you use LSTM(input_size=10, hidden_size=20, num_layers=2) this command packages up two LSTM layers in order to accelerate some calculations. This LSTM block expects to receive 10 values per batch at each timestep. The first layer containing 20 hidden units transforms these 10 values in 20 different ways. The output of this first layer is then passed to the second layer which processes these 20 values in 20 more ways. The output of this second layer is the output of this LSTM block.
Is that any clearer?
To answer your last question. Every single LSTM unit in your model has its own set of weights.