I'm sorry I didn't know about your project a month ago. I'd be very curios to hear how you render the text. Are you still using Ace for the rendering, or is it just for the editing and tokenizing?
In my very first proof-of-concept, I used hidden DOM elements to do the layout and styling of the text, and then queried the element properties to figure out the draw operations I needed to do. It was very slow and really unreliable, though, and I had a lot of cross-browser issues. Ultimately, redoing everything from scratch was actually easier than trying to hack around DOM.
I've been seriously considering implementing a soft keyboard for mobile devices as well. It's just so hard to get the ones in the wild to interact with text in any common way, and on iOS it's nearly impossible to get everything resized correctly to use the most of the screen real estate.
The motivation behind CodeChisel3D is to reuse everything that ace provides, text modes, syntax highlighting, completion and so on. So, yes, my approach is to create a hidden ace editor in the DOM and then hook into the rendering mechanism of ace to render it to a texture that can be mapped into webGl and threejs scenes. The main reason for that is to support live webVR coding. I'm currently working on another project but I will get back to CodeChisel3D and improve it. You seem to have come quite far with primrose and might not be interested but the actual editor integration is here: https://github.com/rksm/three-codeeditor. Feel free to use it.