Because you are telling it to :) This is what bash sees:
file{[1,2],3}.txt
The [ and ] have no special meaning in this context, globs aren't expanded within brace expansions: if a brace expansion results in a glob, that glob would be evaluated by the shell after the brace expansion.
So here, what happens is that the shell sees three comma separated elements in the brace: [1, 2] and 3. This is why it duly prints out file[1.txt, file2].txt and file3.txt. It's no different than using something like file{a,b,c}.txt.
You can see it happening with set -x:
$ set -x
$ echo file{[1,2],3}.txt
+ echo 'file[1.txt' 'file2].txt' file3.txt
file[1.txt file2].txt file3.txt
This behavior is documented in the EXPANSIONS section of man bash where the order of precedence is given:
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and pathname expansion.
As an aside, [1,2] is a perfectly valid globbing pattern, it just isn't expanded inside the braces. For example:
$ touch file{1,2,3}.txt
$ ls
file1.txt file2.txt file3.txt
$ ls file[1,2].txt
file1.txt file2.txt
Note that in globs, [a,b] matches any of the characters a, , or b. It doesn't mean "a or b".