Hi @raimond,
I think your approach is perfect: first creating a point with VertexCreator and then replacing it with a text using LabelPointReplacer absolutely makes sense. If this text feature was written into DGN right away, it would have the default LB (left bottom) justification. So the next step is setting the proper text justification. You are right, this can be done with a format attribute, however the correct attribute to use is igds_justification rather than igds_original_justifiation (igds_original_justification is attribute read by the Reader that indicates what justification was used when the text was placed in MicroStation, this attribute is not used by the Writer). Although, as an alternative to setting igds_justification value manually, I would like to suggest using DGNStyler:

The output text feature might still appear slightly offset. E.g. with the attached workspace I got text coordinates 0.0414,0.0000 instead of 0.0000,0.0000 for the text that has height and width 10 and uses ENGINEERING font. This happens because all fonts have different proportions which DGN Writer is not aware of, i.e. DGN Writer can not calculate the text bounding box and therefore text center location precisely - it can only estimate. The offset depends on the font used and the size of the text feature - in many cases it will be minimal if present at all.
When inspecting your output with Data Inspector, please check igds_original_justification, igds_insertion_x, and igds_insertion_y attribute values as these attributes describe the text original insertion point and justification while other attributes store values calculated for the left bottom corner of the text bounding box (i.e. as if the text had LB justification, this is how MicroSnone2dgnv8.fmwtation handles the texts).