I guess the answer depends on a couple of constraints regarding RafaelJS which I don't know well enough.
If that is ok in your app you could create the element in the my.Circle constructor, with some default values for x, y and r. You would then let the normal property apply methods propagate to the element attributes. (This would sort of defeat an explicit render() method).
If that would render the element too early, and display all the changes to its attributes (which you might want to avoid), I would look for a hide/display-type control of the element. Maybe you can build and change an element when still hidden. The render() method would then just toggle the visibility.
If this all doesn't work, and you are forced to create the element in the render() method for some reason, there is probably no way around some kind of little protocol:
Create the element in the render() method with whatever values you have for the mandatory attributes (e.g. x, y and r), be they init values or user-defined.
The apply methods that belong to properties that can only be set on existing elements could write their changes to an internal queue (probably just a list of attribute maps), instead of writing directly to the element. This way you capture all "premature" property changes.
The render() method then just applies the elements in the queue. This would implement the "defered property application" you mention in the question title. The downside would be that all further property changes would only take effect with the next render() call (avoiding element creation this time).
Of course you could make a combination of that and what you have already, writing to the queue when the element is not yet created and modifying it directly otherwise.