A border is a stroke in the canvas. That's how the API works in the browser, and that's the API is used to create the Cy.js visualisation.
Drawing the border prior to the node body with clipping could make the border less like a stroke, but that comes with a high expense -- unacceptable when many users need high performance graphs. Semitransparent borders are a good compromise aesthetically and with respect to performance.
With regards to the overlay: No, it is not possible to do that in a generic manner. For some shapes, it would be sufficient to draw the node body shape as the overlay but with just a larger size -- but this does not work for shapes such as triangle
.
If I were you, I would go with the semitransparent border -- at least for now. Alternatively, you could use a smaller overlay such that it's a tighter fit.
If you really want, I could point you in the direction of the code to modify.
Edit: Or maybe a (new) border-z-order
style property or similar would work for you? If your nodes are opaque, then having the border behind does not require clipping...