Is it possible to change a user's password in the front-end?
It is! To do so, they will have to be logged in and input their old password. They need the old password to change their email or update a password.

Here's an example:

{% macro errorList(errors) %}
    {% if errors %}
        {% for error in errors %}
            &lt;div class="error icon-cancel-circled"&gt;{{ error }}&lt;/div&gt;
        {% endfor %}
    {% endif %}
{% endmacro %}
{% from _self import errorList %}

&lt;form method="post" action="" id="action-form" accept-charset="UTF-8" enctype="multipart/form-data"&gt;
    {{ getCsrfInput() }} {# Remove this if you aren't using CSRF #}
    &lt;input type="hidden" name="action" value="users/saveUser"&gt; {# "users/save-user" if you're on Craft 3 #}
    &lt;input type="hidden" name="redirect" value="{{ entry.url }}"&gt;
    &lt;input type="hidden" name="userId" value="{{ currentUser.id }}"&gt;

    &lt;label for="currentPassword"&gt;Current Password&lt;/label&gt;
    &lt;input type="text" class="form-control" id="currentPassword" name="password" /&gt;
    {% if account is defined %}
        {{ errorList(account.getErrors('currentPassword')) }}
    {% endif %}

    &lt;label for="email"&gt;Email&lt;/label&gt;
    &lt;input id="email" type="text" name="email" class="text" /&gt;
    {% if account is defined %}
        {{ errorList(account.getErrors('email')) }}
    {% endif %}

    &lt;label for="newPassword"&gt;New Password&lt;/label&gt;
    &lt;input type="text" class="form-control" id="newPassword" name="newPassword" /&gt;
    {% if account is defined %}
        {{ errorList(account.getErrors('newPassword')) }}
    {% endif %}
&lt;/form&gt;


This is code that would be inserted into a new custom front end template.