This is a really broad question. Unity is a very powerful and feature-rich game engine. It provides you with several tools which can help you to create unique procedural graphic effects in Unity:
- Programming your own shaders gives you a lot of freedom to develop graphic effects on the GPU
- The Mesh class gives you access to the vertex and UV coordinates of your 3d models. You can use it to deform or even generate new 3d objects at runtime.
- The methods GetPixels and SetPixels of the class Texture2D allow you to procedurally change or generate textures from C# scrips. But keep in mind that real-time image manipulation like that should better be done on the GPU than on the CPU. When you are going to change a texture every frame, you should rather be doing this with a shader for performance reasons.
And then there is of course a lot of cool stuff you can do with the special effect tools Unity provides to you out-of-the-box:
- The post processing system can add all kinds of neat visual effects to the whole camera. You can even program your own.
- Particle effects
- Line Renderers
- Trail Renderers
If I would want to copy Duet in particular, I would do the trails of those red and blue balls with trail renderers. For the after-image of the blocks I would try the motion blur post-processing effect first and when that doesn't give me the effect I want I would use particle effects to generate fading clones of the same sprite used for the block. Those background animations could be done by creating a couple of sprites and animate their transforms with the animation system. When I run into performance problems due to having too many game objects, I would switch to the new Entity - Component - Systems architecture for the background objects.