I would at all costs avoid attempting to add any type of DOM elements to your option elements because this is never guaranteed to work.
If you take a look at the spec for option tags, you'll find that the only content model accepted is either Empty or Text, meaning nothing or just text. CanJS sticks close to the spec, which is why it renders it just as straight text, because options only allow for text.
If you are stuck with spans and other HTML in some of your data and you can't get rid of them by any other means, I would recommend writing a helper function to strip HTML tags out of the text for you, something like...
can.Mustache.registerHelper('displayHelper', function(display) {
var stripped = display().replace(/<[^>]*>/g, "");
return stripped;
});
And modify your template to look like...
{{#options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>
{{{displayHelper display}}}
</option>
{{/options}}