Reflective binary ordering The reverse of an n-bit number is just its n binary digits in reverse order:


  001010010 &rightarrow; 010010100


Given a number n, generate all n-bit integers ([0, 2n-1]) in an arbitrary order, with only one restriction: there must be a splitting point such that  the reverse of an integer is on the opposite side of the splitting point. Integers which are their own reverse must come before the splitting point.

Other than this single splitting point there are no restrictions, all the integers before or after it may come in whatever order you desire.

Example for 4 bits (you don't have to generate this order):

0000, 0001, 0010, 0011, 0101, 0110, 0111, 1001, 1011, 1111,
0100, 1000, 1010, 1100, 1101, 1110


You may output the integers as their binary digits or just as integers. You don't have to explicitly output the splitting point.
JavaScript (ES6), 129 114 bytes

f=n=&gt;[...Array(p=1&lt;&lt;n)].map((_,i)=&gt;(p+i).toString(2).slice(1)).sort((a,b)=&gt;g(a)-g(b),g=a=&gt;[...a].reverse().join``&lt;a)


I appear to have stumbled on the code that happens to generate the given example for 4 bits. Edit: Saved 15 bytes thanks to @ConorO'Brien.