template<typename Iter>
class Value_iter : public Iter
{
public:
    Value_iter(const Iter &it): Iter(it){}
    typedef typename Iter::value_type::second_type value_type;
    value_type operator*()
    {
        return Iter::operator*().second;
    }
    value_type operator->()
    {
        return Iter::operator->().second;
    }
};

こういう感じで、一部の関数を上書きするために公開継承を使っても問題はないでしょうか。
std::map<A,B>::iterator 辺りを渡されることを期待するテンプレートです。