Indeed you can't modify samplers from particle script, you can only read data from them, and the same goes for attributes.
You could use Attribute Samplers which are just samplers but placed under the "Attribute Samplers" category of your FX.
What happens is that you'll be able to override/modify those samplers inside the engine: say you create a Shape attribute sampler, then you'll be able to override this shape with a new Shape sampler actor in UE4, and move it directly in Unreal, and the same method is valid in Unity/Custom engine.
You could add a "MyShapePosition" Attribute as a float3 that would be set in engine, having a "MyShape" shape sampler that is at the origin, and sample it that way (in the Spawner Script for example):
function void Eval()
Position = MyShape.samplePosition() + MyShapePosition;
This float3 attribute would only act as an offset. Depending on whether you sample this shape in local/world space context, you would need MyShapePosition to be setup accordingly.
An advantage is that it would allow you to sample the MyShape sampler at particle evolve time, which attribute samplers don't allow right now.
Hope this helps.