1570s, "stump of a tree, branch," of Scandinavian origin, compare Old Norse snagi "clothes peg," snaga "a kind of ax," snag-hyrndr "snag-cornered, with sharp points." The ground sense seems to be "a sharp protuberance." The meaning "sharp or jagged projection" is first recorded 1580s; especially "tree or branch in water and partly near the surface, so as to be dangerous to navigation" (1807). The figurative meaning "obstacle, impediment" is from 1829.
"be caught on an impediment," 1807, from snag (n.). Originally in American English, often in reference to steamboats caught on branches and stumps lodged in riverbeds. Of fabric, from 1967. The transitive meaning "to catch, steal, pick up" is U.S. colloquial, attested from 1895. Related: Snagged; snagging.