Yes, you could pass more arguments to __getitem__, but would need to feed them from the sampler.
You could change some internal attributes of the Dataset before starting each new epoch.
During the epoch the DataLoader will create copies of the Dataset for each worker, so changing internal attributes won’t be reflected in all copies.