Q:

how justified is to use reference instead of pointer for the ease of use in C++?

how justified is to use reference instead of pointer because you can access the members with '.' instead of '->' operator.
Like inside the function
void func(stStates &states)
{
   states.nextState = 0;
}

instead of
void func(stStates *states)
{
   states->nextState = 0;
}

A:

Use pointers when you need pointers, use references when you don't but don't want to pass by value. The fact that one takes one more character than the other to use should be the least of your concerns.

A:

 void func(stStates *states)
 {
     states->nextState = 0;
 }

Writing such code is courageous!
At least you should assert, that no nullptr is passed before dereferencing the pointer parameter:
void func(stStates *states)
{
   assert(states);
   states->nextState = 0;
}

or you handle that smoothly, if you don't require to have a valid instance of stStates passed when your function is called:
void func(stStates *states)
{
   if(states) {
       states->nextState = 0;
   }
}

Neither of these mentioned methods will save you from invalid pointers passed in like:
stStates* states; // << uninitialized, points elsewhere
func(states);

Well there may be a compiler warning.

Using a reference on the other hand mostly requires correct initialization at compile time, and avoids the problems stated above.
Though you still can do silly things like this, and the compiler won't warn you about it:
#include <iostream>

int main()
{
    int* p = nullptr;
    int& r = *p;
    r = 42;
}

Result:
clang++ -std=c++14 -Os -Wall -lboost_timer -lboost_system main.cpp && ./a.out
bash: line 7: 26635 Illegal instruction     (core dumped) ./a.out

