Yes, you can create new nn.Parameters after each iteration manually.
However, you would need to pass these new parameters to the optimizer again, so that they’ll be updated. In case the optimizer has internal states, you could also try to reuse (some) of them or let the optimizer just create new ones for the new parameter.
Also, you would have to come up with a strategy to change the parameters. I.e. you could slice the weight matrix or reduce it in any other way (e.g. mean) to decrease the features and you could e.g. concatenate a randomly initialized tensor to the weight matrix to increase the size of the weight matrix.
Note that changing the out_features of one layer would also need changes in the subsequent layer in its in_features (and thus also internal parameters).
Given that, it might be easier to use the functional API and work directly with all parameters.