I agree on that the autoload approach is by far the easiest to make a signal bus, but it also has its own pitfalls.
Two developers might want to add new signals to the autoload while working on separate tasks, which will lead to git conflicts.
Scripts that use the autoload are less flexible. When the signals are resources, they can be swap easily from the inspector to allow nodes to interact differently, which makes them reusable and easier to test.