If we overlook the haphazard behaviour which appears to be some special, there is actually a solution, if the aim is to parse paths of various sorts. And that is to use language 0 for the full-text index. 0 is language-neutral, and I have used this when building full-text index for Source Code.
This scripts finds all foo-bar.
DROP TABLE ullig
CREATE TABLE ullig(id int NOT NULL, text nvarchar(800) NOT NULL,
CONSTRAINT pk_ullig PRIMARY KEY(id))
INSERT ullig(id, text)
VALUES (1, 'https://example.com/foo-bar/file.txt'),
(2, '/home/user/foo-bar/file.txt'),
(3, '/home/user/foobar/file.txt'),
(4, '/home/user/brand-new/file.txt'),
(5, '/home/user/hunter/file.txt'),
(12, 'home user foo-bar file.txt'),
(13, 'home user foobar file.txt'),
(14, 'home user brand-new file.txt'),
(15, 'home user hunter file.txt')
CREATE FULLTEXT INDEX ON ullig(text LANGUAGE 0)
KEY INDEX pk_ullig
ON katta
go
SELECT * FROM ullig
WHERE CONTAINS(text, '"foo-bar"')
By the way, the special may only be for English, language 1033. I also tried language 1053, i.e. Swedish, and it also found me all instances of for-bar.