I think I understand your suggestion... but have some concerns:
* One challenge with transforming ctagsargs into a list[] when it begins as a string is that I would have to correctly parse the args out.  This could vary based on &shell value. 
    * For example, for cmd.exe, I would split on space when the space isn't inside a double quotes (excluding escapped double quotes which is """).
* s:EscapeCtagsCmd() could be simplified to only work with [] only... but then I would have to update other calls like this: `s:EscapeCtagsCmd(g:tagbar_ctags_bin, '--version')`... not a big deal though. (Just a note for self.)

My biggest concern is how to reliably parse the ctagsargs when it is a string.  For now, I think it is safer to leave it as a string.