Yup, an external DLL (Native, ActiveX, .NET, whatever) is the only way at the moment afaik.
Luckally, as you have seen, MnJul has
shared a technique which will let you grab Plus! objects directly from your DLL.
So you don't even need a temporary Plus! window anymore either as a kind of
man-in-the-middle* to talk to your DLL if you want to manipulate or fire Plus! events.
*This man-in-the-middle technique was also used with the SendTo script for example. The external DLL simply sends a message to a Plus! window, which is a small (1x1px) hidden window dedicated only for this and subclassed by the Plus! script. And the Plus! script on its turn comes in action when it detects a new message on this Plus! window and does what it is suppose to do.
--------------------------
This only leaves the drawing on the chat window problem. Which is, afaik, almost impossible to do in a proper way....
(It is possible though, prooven by Plus! itself, but it would require a hell of a lot of very advanced programming, which nobody but Patchou has mastered to do in a proper reliable way... -damn him and his secrets -)