Plugin: Tags field for front-end Entry Form
While the full answer to this probably requires some planning, and a plugin that handles various aspects of the tag management, here are a few components to consider:

You can submit tags from the front-end and, on the server side, they will behave like Craft handles them in the Control Panel. The syntax for your front-end form field is as follows:

&lt;select multiple name="fields[fieldHandle][]"&gt;
  &lt;option value="13"&gt;Tag Name One&lt;/option&gt;
  &lt;option value="42"&gt;Tag Name Two&lt;/option&gt;
  &lt;option value="144"&gt;Tag Name Three&lt;/option&gt;
&lt;/select&gt;


For a more friendly UI, there are a handful of javascript libraries that could help on the front-end. I believe the one that Craft uses in the Control Panel is selectize.js and it could be setup to be used on the front-end as well.

To handle the pre-processing of tag behavior before an Entry is saved, your plugin may need to use the entries.onBeforeSaveEntry Event.