But just having the ability to infer the type doesn't force the developer to use it. In the case of structs that contain several levels of anonymous structs, an initializer is currently forced to be very repetitive. For the OP's example, which wasn't that complex, here's what you end up with for a shortest possible initializer:
x := &tar{struct{bar struct{value int}}{struct{value int}{2}}}
Notice the unavoidable repetition of struct{value int}. This gets exponentially worse with as the complexity of anonymous structs grows. For example if the tar type were anonymous as well, we would have this:
x := &struct{foo struct{bar struct{value int}}}{struct{bar struct{value int}}{struct{value int}{2}}}
where we have to repeat bar twice and value three times.
Adding just one field to foo makes it look like this:
x := &struct{foo struct{bar struct{value int}}, baz struct{value string}}}}{struct{bar struct{value int}, baz struct{value string}}{struct{value int}{2}, struct{value string}{"abc"}}}}
I think you can see what I mean by exponentially worse.
If type inference applied, this would be possible (for the original example):
x := &tar{foo: {bar: {value: 2}}}
which to me is much more readable. Yes, it could be shortened further to &tar{{{2}}}, which is arguably less clear, but again the programmer is not forced to use this super-short style, whereas they are currently forced to state and re-state the anonymous struct types, which to me is much less readable.
I realize the example is not "real code", but large hierarchies of anonymous structs can be useful in JSON or XML encoding and decoding. Building tests with hardcoded sample data of those types is currently too onerous. Applying type inference would fix that, without breaking any working code.