To answer your problem
You can change the ParticleSystem.simulationSpace
Controls whether particles are animated in the parent object’s local space (therefore moving with the parent object), in the world space, or relative to a custom object (moving with a custom object of your choosing).
to ParticleSystemSimulationSpace.Local
Simulate particles in local space
Either via the Inspector of the Main Module

or via code like
GetComponent<ParticleSystem>().main.simulationSpace = ParticleSystemSimulationSpace.Local;
To answer your question title
Yes. You can get the particles via ParticleSystem.GetParticles
, change their ParticleSystem.Particle.position
and then write them back into the system using ParticleSystem.SetParticles
var particles = new ParticleSystem.Particle[theParticleSystem.main.maxParticles];
var currentAmount = theParticleSystem.GetParticles(particles)
// Change only the particles that are alive
for (int i = 0; i < currentAmount; i++)
{
particles[i].position = XYZ;
}
// Apply the particle changes to the Particle System
theParticleSystem.SetParticles(particles, currentAmount);