Different assemblers do thing differently, but this shouldn't be too hard to pull off. As BRPXQZME said, using constant labels with BSR ought to work, as long as the assembler knows where your code is to be located (via .ORG or another method), and the distance isn't outside the range of a relative branch (I don't know 68k, but on some architectures, there is a relatively small range). So, once you know where in the ROM you intend to insert your code, it should be possible to assemble it cleanly without putting raw memory values in the main code.
Getting some assemblers (particularly GAS) to output raw binaries can be tricky sometimes, but I'll assume you've got that part figured out. If not, I can give you an objconv command that'll work with GAS's output. So, once you've got your binary and know where you want to insert it, all you have to do is get the bits in there somehow. I assume this is the part you're having trouble with. (If not, please say what the issue is and I'll try to help.)
One simple way is to use a hex editor. You'll need one with copy and paste. Open your binary blob and copy the contents. Open the ROM and seek to the location it should be inserted at and paste it in. Be careful though. Hex editors generally operate in two modes. In one mode, pasted bytes overwrite the existing content, keeping the ROM size the same. This is the mode you want. In the other mode, pasted bytes expand the file. How to set this depends on the editor, so look it up if you can't figure it out. (In some editors, they're two different sorts of paste operations instead.)
If you prefer something more automated, which will speed up the build-test-debug cycle, there are other options. There are a variety of programs that can do code insertion. I use dd, but that's a unix utility (and frankly a little weird). You can get a Win32 port (I assume you're on windows, if not, you should have dd as un*x and OS X have it), but that might be a pain. If you've got the skills and tools for even the most basic of PC programming, you can write your own, it's pretty simple. Here's some psudo-code as I don't know what language(s) you might use:
function patch(rom_name, bin_name, out_name, pos)
rom = file(rom_name, READ)
bin = file(bin_name, READ)
out = file(out_name, WRITE)
data = rom.read(pos)
data = bin.read()
rom.seek(pos + bin.size)
data = rom.read()
Or you can use the trick Ti suggested and have the assembler and incbin to do it for you. His method will work if you're putting your code somewhere other than where the code you're replacing was. If you're dropping it inline where old code you're replacing was, you can do something like this (in GAS):
.incbin ROM 0, INSERT_POS
.incbin ROM INSERT_POS + HACK_SIZE
Finally, you could write a custom link script and have LD (from GNU binutils, you should have it if you have GAS), put all the bits where they go. That's kinda' complicated though, but if you want to go that route, I'll try to help you out.