When I first wrote this post, I was thinking using async as Google recommends using it and I hadn’t a real perspective about this concept.
I just thought that I needed to add the word async to my scripts to be OK with Google.
Later, I managed to fix it by modifying one single line in one file inside W3TC plugin (a really simple fix by adding the word async in the right place, just it), but I soon realized that this change broke my site completely, as the async loading of scripts means that you don’t control the order where scripts are loaded, so there are times your site loads right and other that it doesn’t with lots of undefined functions. It depends on every user browser and it’s something random.
Using async is a feature that really needs heavy knowledge of programming, and I don’t recommend using it unless you are able to modify several files inside your theme. It requires knowing what scripts are loaded, what for are each of them and that you are able to modify those scripts to wait for their dependencies to be loaded first.
So, as a rule of thumb, if you are not able to find for yourself the file that should be modified inside W3TC, async is not for you.