What are all the ways to earn points?
Obviously completing a step gives you 10 points. However I see people with points in multiples that are not divisible by 10, meaning there is some other way they are adding an arbitrary number of points.
What are the other ways to earn points?
Timed Practice. 0 to 21 XP.
Depending on how many questions you get right in a row.
App lessons (not strengthen) on at least some versions of the Android app. 10 to 15 XP.
Probably depending on how many questions you get right in a row.
Bots. See Gracebirdgirl's comment.
(Some people may have odd numbers at the end of their scores still from having used these.)
Hearts. 10 to 13 XP.
Depended on how many hearts you had left at the end.
Duolingo Immersion (article translation). Variable amount.
Depended on how much you translated and how high your level was.
Here are links to pages about them from the unofficial wiki:
Hearts still exist for Windows mobile app and testing out. (As far as I know.)
Immersion has been wholly withdrawn. A user was able to translate web articles (providing there were no copyright issues), and would gain XP for each sentence translated. Users could upvote other users translations, or write their own which would replace the previous translation immediately. An automated "hints" sentence was provided by "Duobot". It is possible to get a partially similar experience using a browser add-on/plug-in to translate highlit words on wikipedia, or perhaps by using http://readlang.com
If you are on the mobile app, there is a section called Bots. They are fictional people that have very basic conversations with you in the language you are learning. I think you can learn up to 30 points per session, but that's hard to do. Thus, people have points that end in a 3 or 7 or something. Other than that, I think you can only stay in numbers that are divisible by 10.