The mutable object in the Git data model known as a "branch" is really just a ref and nothing more. Traditionally it points to a commit, though it could point to a blob or tree or tag object, in which case commit-oriented commands won't work on it (while other commands which wouldn't work on commits may).
A logical branch, on the other hand, is a particular commit, its parent commit(s), their parent(s), etc.—not a sequence per se but rather a tree. The logical branch concept captures the "structure" of the branch. Logical branches are immutable, but new commits can refer back to them to create a new, larger tree.
The logical branch has no intrinsic name, but may optionally be identified extrinsically by one or more named refs, including but not limited to Git branches.
Commands which modify branches generally create a new logical branch composed of one or more new commits referencing zero or more existing commits and also update the Git branch—the ref—to point to the new commit(s). A few commands, e.g. "git reset", update only the ref without creating new commits. It is possible, though awkward, to work exclusively with nameless logical branches and never even create a Git branch referring to those commits.
Contrast this with version control systems like Bazaar where all commits actually do belong to specific named branches, with the branch name recorded in the commit object.