3 is the best solution for your use case. You don't need to create all those forks systematically: fork the plugin only when you really need to change something and replace the original submodule with your fork.
That said, I use a mix of 3 and 4: my plugins are not submodules and I've made forks of two of them for customization purpose.