EDIT: OmniPlan, not OmniProject, and I promised a footnote ;)
JIRA is as system that is hilariously hobbled by two forces - JIRA admins and management, the latter often driving JIRA admins into making bad changes[1].
It has a very keyboard-capable UI that isn't highlighted enough (make it exempt from anything that might hijack keyboard, and hit . (dot) - it will bring you an autocompleting text box allowing you to do every action you can on given page).
The big issue however is that there's nothing really integrating the links system between JIRA items, and the basic task model is indeed rather limited. The links are fully free form (which can be a pain when someone defines a new copy of every standard link type, in german, without connection to localization system), but I have yet to see something that isn't the advanced query (i.e. the SQL-like queries you can type in various places in JIRA) that exposes it nicely and graphically.
That said, graph-based task representation is the norm on the higher end of _desktop_ project management tools, ones that often involve physical things to make, like MS Project or OmniPlan (and going back all the way to LisaProject, which apparently became very liked at NASA for exactly that graph based view).
[1] At one point, a friend of mine had enough and implemented exactly what the management asked for, without spending futile time trying to help them see the truth, or fixing it quietly by themselves. The results were glorious, as the whole project essentially ground to halt for a sprint or two, and could be a poster example of why people tell you to not mess and use provided standard workflows. Management never again asked for workflow changes after asking for reversal of their own design[2].
[2] Management, in their infinite wisdom, designed a one-way-only workflow, where a task could proceed a workflow a bit like this: Backlog -> TODO -> Development -> QA -> Done. Notice lack of any way to move a stage back, and there was no way to force change a task to different stage. Tracking real status of tasks became impossible as everything was left at "Development" because if you found anything to fix after it left QA... well, no way to change the state without hacking the database, which might have not gone well with Atlassian Cloud admins ;)