I don't use cols parameter for defining dimensions and measures. For this I use options parameter called qHyperCubeDef instead. I do this because of consistency - as I understood, you can't update cols for created object - you can only update options by using QVisualization method "setOptions". Many visualization types support setting qHyperCubeDef's qDimensions and qMeasures in options, for example:
Re: qHyperCubeDef property for table options in Visualization API
You can achieve it using the "applyPatches" method on the model of the visualisation but it involves a lot of logic. It's probably quicker to just recreate the visualisation again with your new requirements using the Visualization API. As long as you clean up after yourself and use the close() function on any viz you want to destroy you should be ok.