I've seen very compelling results in small scale experiments. I've personally achieved basic tool use (reading a prompt buffer and writing to an output buffer) in a SNN simulation. The biggest takeaway for me is that the fitness function is the most important thing followed by selection criteria and simulation parameters. Figuring out how to compact the total measure of fitness into a single float as the simulation progresses is non trivial. I've found that dynamically adapting the fitness function and simulation parameters over time is essential.
To be clear, I don't know if I've achieved learning/generalization by the formal definition yet. I do know I can minimize the loss over a training set by merely mutating the weights of neurons with otherwise fixed delay and connectivity. I'm not even doing things like crossover or elitism yet. My next sprint will attempt varying the delays as well as the weights. I've also got some really strong opinions about the ratio of excitatory to inhibitory neurons now. I think inhibitory neurons are a bandaid for physical limitations. In a simulation, we can simply constrain the total allowed ticks or global activations per candidate. The selection pressure will reject candidates that can't get the job done with the allotted resources.
I think you can do the real deal on one powerful workstation. I've got networks with 10k neurons and I can run through about 4000 generations x 250 candidates on a single threadripper in a day. The main bottleneck being memory bandwidth as networks grow in size. Cloning them each generation starts to take a long time once you get into 6 figures. You really want as many generations per unit time. Being able to watch it evolve at meaningful rates of speed can unlock new understanding about your fitness function.