This occurs even in the masked textbox API demo.
On Page load the markup looks like this:
The mask works.
If you click the Readonly button the markup changes to this:
The only apparent difference is the addition of the readonly attribute.
If I remove the readonly attribute. I can type in the textbox again, but it doesn't follow the mask.