Your first question is whether you're going to do this by hand or with a computer. I would do the latter and that's the assumption of this answer. If you want to do it by hand, then you need to use all the craftiness of a human solver to take short cuts. Even so, I would consider getting a computer to solve the mazes.
So. First, you need a maze solver!
To solve a maze like this you need to change it into a graph.
The graph would not necessarily look like the maze. In particular, this maze has "states", meaning you can arrive at the same physical location but be in a different state (meaning what is the next color you must cross). So each "node" (meaning the entire area between dots) is actually 3 nodes (one for each color).
This is a very common idea for mazes that have a "state". See my recent puzzle as an example. Or www.clickmazes.com.
To be clear, there would be three nodes in each of the places that I've marked with a diamond and they would be connected with 1-way arrows (so we'd be using a directed graph, aka digraph). By the way, there are many places where you might be tempted to take a short cut, for example in the bottom right-hand corner. I would recommend against that. The computer won't mind the extra step or two to solve the maze and it will keep it cleaner for when you start varying the colors.
Then an algorithm like Dijkstra's will solve your maze or determine it to be unsolvable very rapidly.
Now you have a number of choices, depending on details. You could start with a layout and have the computer vary only the color of the dots. Each maze you get could be checked and you could select those that have a good score (eg steps to complete or some complexity measure).
Computers are very good at varying a solution and seeing what changes, so once you get a decent solution, you could vary each dot through all the colors (or each pair of dots or whatever) and find optimal solutions near to the one you've found already.
You can also get the computer to just generate mazes at random and test them, and then use ones that happen to be good to do slight variations. You can use a kind of evolutionary approach, where you mate two reasonable mazes that you find randomly and keep the "better" ones.
And you can just go through all the possibilities (this is relatively rare). For example, you have 30 dots in your simple maze and each can be 3 colors, so there are $3^30$ mazes to check. This is not really a feasible number to check by brute force in general, so you need some way to whittle it down. In a maze like yours, you could break the maze down to multiple components and maximize each component separately, but that would take a bit of thought and care.
You can also think about how you varying the topology. It can be done in a similar way. I would recommend that you do it in a two-stage process. Define the topology (either randomly generating it, or do it by hand to get things started in a way that is pleasing to you as the puzzle creator), and then do all the above.
I personally use python for this, but almost anything will do.