The onEnd event is not fired when the last step of the tour references an element that does not exist.
Chrome 55.0.2883.87 (64 bit) OSX
Current Behaviour and steps to reproduce:
Set up a tour that has a number of steps, if the last of the steps references an element that does not exist on the page, the tour finishes without firing the onEnd event. (worth noting that if the non-existent element step is NOT the last step then the tour skips this step and continues on as normal, firing the onEnd event as expected)
JSFiddle of current behaviour
Fire the onEnd event, or add a new onError event that passes in the step index of the error (so that if it's the last element the onEnd method could be called).