You can merge your per-version and all-version menu.tcl files into a single menu.tcl file
Whenever you want something to be specific for a particular Nuke version just check which version of Nuke is loading and act accordingly.
In my init.tcl file I have it add plugin paths based on the current version of Nuke being loaded. Here is a small sample of my init.tcl file.
CODE
switch $nuke_version {
"4.6000" {plugin_appendpath "[set env(HOME)]/.nuke/plugins/NFX/4.6"}
"4.7100" {plugin_appendpath "[set env(HOME)]/.nuke/plugins/NFX/4.7v1"}
"4.7200" {plugin_appendpath "[set env(HOME)]/.nuke/plugins/NFX/4.7v2"}
"4.7300" {plugin_appendpath "[set env(HOME)]/.nuke/plugins/NFX/4.7v3"}
"4.7400" {plugin_appendpath "[set env(HOME)]/.nuke/plugins/NFX/4.7v4"}
}
Just do the same for all your version specific commands. Heres an example menu.tcl file for adding a menu item based on the version of Nuke being loaded.
CODE
switch $nuke_version {
"4.6000" {menu "Nuke4.6/item46" item46}
"4.7100" {menu "Nuke4.7v1/item47v1" item47v1}
"4.7200" {menu "Nuke4.7v2/item47v2" item47v2}
"4.7300" {menu "Nuke4.7v3/item47v3" item47v3}
"4.7400" {menu "Nuke4.7v4/item47v4" item47v4}
}
The problem you are probably having with custom init.tcl files is that you are not loading the other custom init.tcl files when your main init.tcl file loads. In your user init.tcl file you are going to have to load the other tcl files.
So in your user init.tcl file add something like
CODE
load user_init.tcl
load other_init.tcl