That foo is the default value for u:String = "foo" in the XCommand struct, not the outer struct. I c hanged var u:String = "foo" in XCommand to var u:String = "XComandFoo" and ran your code:
release> ./LeafOnly x -u bar
x: u = XComandFoo
Your point is still valid: adding @Option to a command messes stuff up at its subcommand level.