It's defiantly doable. The tricky part will be allowing other users to 'manage' some people.
I'd probably look at something like Zoo Visitor (EE2) as it saves users 'profile' to channel entries which does come in handy.
A user signs up where it creates a new user (you will likely have to use email address as the unique member identifier).
After signup, redirect to "/update" (or whatever URL) which is a 'channel form' some things will have to be pre-formatted (title, url_title etc but you'll never use most) here they can enter their "stats". Saving this page will make that member the "author" and once they're the author you can restrict viewing it to that author.
This will take care of users being able to only see their stats.
For "trainers" you're going to have to manually assign them to entries by using a relationship field - a custom field that is added to the members channel that links to a specific 'trainer'. then you can have a url like "/trainer/manage" where you can search the members channel for the currently logged in 'trainer' - not trivial but do-able. This would return a list of members assigned to the logged in trainer where the could click on each member like "/trainer/edit/ID_of_chosen_member".
This is all overly broad but so to is the question. You have yet to declare what data will they be managing, how is the data updated, is the data to be historical… if so you will need multiple entries – you will want to use a separate channel specifically for this purpose.
I've done similar before, you do have to compromise on some things and re-arrange others. For 'getting' data you're best to use member ID's and plan, build, re-configure, plan, build. From memory, I used Stash a helluva lot, as it was easier to capture a bunch of data and filter it dependant on the logged in user.
There is no right or wrong just try and try again.