While @AniketThakur's answer is very good. No one has answered the following question yet.
Can I only send pull requests via GitHub if I've forked a project?
No. If you are a contributor to a repository, you can: Make a local clone. Make a local branch. Add commits to that branch. Push the local branch back to github (creating a remote branch in the process). Make a pull request requesting for that branch to be merged into the master branch (or whatever branch you like).