What I would do is create a hybrid plugin and pass whatever data you want from the extension back to the C++. There you can use the API to pop a Save as dialog.
Alright, I've got a working version using jsx:
var Name = app.activeDocument.name.replace(/\.[^\.]+$/, '');
var Path = app.activeDocument.path;
var saveFile = File(Path + "/" + Name +".json");
saveFile.encoding = "UTF8";
saveFile.open("e", "TEXT", "????");
Reference this post for getting JSON.stringify on the JSX side: HTML Panels Tips: #5 passing Objects from JSX to HTML | Photoshop, etc.