It is not Transifex not allowing it, but rather the whole gettext system definition. Every entry has to have an msgid entry. That defines the entry. If this entry is the same, than msgctxt separates them.

Transifex is not flawed, because normally the source PO file is always machine generated from the source files. We just make it manually due to the ID system we have and the numerous ways we are passing these IDs. So the manually generated PO file must follow the rules of a machine generated file.